本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.2 InputStreamReader
是字节流通向字符流的桥梁,它使用指定的charset读取字节将其解码为字符
构造方法:
- InputStreamReader(InputStream in)
- InputStreamReader(InputStream in, String charsetName)
使用步骤:
- 创建InputStreamReader对象
- 调用read方法
- 释放资源
练习
InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\test\\utf-8.txt"), "UTF-8");
String line;
int len=0;
while ((len = isr.read()) != -1) {
System.out.print((char) len);
}
isr.close();
PS:编码换成“GBK”则会乱码
第五章:序列流
1.1 ObjectOutputStream
把对象以流的方式写入到文件中
构造方法:
- ObjectOutputStream(OutputStream out)
特有的成员方法:
- void writeObject(Object obj) 将指定对象写入ObjectOutputStream
使用步骤:
- 创建ObjectOutputStream对象,传入字节输出流
- 使用ObjectOutputStream中的writeObject方法,把对象写入文件中
- 释放资源
# Person类
public class Person implements Serializable {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
# main
public static void main(String[] args) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\test\\obj.txt"));
oos.writeObject(new Person("赵丽颖", 18));
oos.close();
}
注意:Person类需要implements Serializable 类才能序列和反序列化
1.2 ObjectInputStream
简述:把文件中保存的对象以流的方式读取出来
构造方法:
- ObjectInputStream(InputStream in)
特有的成员方法:
- Object readObject()
使用步骤:
- 创建ObjectInputStream对象,传入字节输入流
- 使用ObjectInputStream中的readObject方法读取保存对象的文件
- 释放资源
- 使用读取出来的对象
练习
// 读取上个练习存入的对象(重写了toString方法)
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\test\\obj.txt"));
Object readObject = ois.readObject();
ois.close();
System.out.println(readObject);
// 将读取出来的对象强转成Person类型,然后进行使用
Person p = (Person) readObject;
System.out.println(p.getName() + ", " + p.getAge());
# 输出
Person [name=赵丽颖, age=18]
赵丽颖, 18
第六章:打印流
简述:平时我们调用 print 和 println 方法完成的,这两个方法都来自于 java.io.PrintStream 该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。
1.1 PrintStream
构造方法:
PrintStream(File file) // 输出的目的地是一个文件
PrintStream(OutputStream out) // 输出的目的地是一个字节输出流
PrintStream(String fileName) // 输出的目的地是一个文件路径
练习
public static void main(String[] args) throws FileNotFoundException {
PrintStream ps = new PrintStream("E:\\test\\p.txt");
ps.write(97);// 使用继承的write方法写入,结果:a
ps.println(97); // 97
ps.println("HelloWorld");
ps.println(8.8);
ps.println(true);
// 释放资源
ps.close();
}
改变打印流向:
PrintStream p2 = new PrintStream("E:\\test\\p.txt");
System.out.println("在控制台输出");
System.setOut(p2); // 把输出语句的目的地改变为打印流的目的地
System.out.println("在打印流的目的地输出");
// 释放资源
p2.close();