标准输出流:
打印流:
字节打印流:
OutputStream -> FilterOutputStream -> PrintStream
因此PrintStream可以使用OutputStream的三个写入数据的方法:
- write(int b)
- write(byte[] b)
- write(byte[] b, int off, int len)
也有它特有的写数据的方法:
PrintStream ps = new PrintStream("D:\\IdeaProject\\untitledDemo\\p.txt");
//调用PrintStream特有的写数据的方法
ps.print(97);
ps.println("a");
ps.print("b");
ps.close();
字符打印流:
Writer -> PrintWriter
PrintWriter pw1 = new PrintWriter("D:\\IdeaProject\\untitledDemo\\p.txt");
pw1.write("hello");
//手动换行
pw1.write("\n");
pw1.write(97); //对应字母a
pw1.close();
PrintWriter pw2 = new PrintWriter(new FileWriter("D:\\IdeaProject\\untitledDemo\\p.txt"),true);
//下一行写出的自动换行
pw2.println("hello");
pw2.print(97); //对应97
pw2.close();
用打印流来改进复制文件:
//改进前
/*BufferedReader br = new BufferedReader(new FileReader("D:\\IdeaProject\\untitledDemo\\p.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\IdeaProject\\untitledDemo\\p2.txt"));
String line;
while ((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();*/
//改进后的
BufferedReader br = new BufferedReader(new FileReader("D:\\IdeaProject\\untitledDemo\\p.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("D:\\IdeaProject\\untitledDemo\\p2.txt"),true);
String line;
while ((line=br.readLine())!=null){
pw.println(line);
}
pw.close();
br.close();
对象序列化流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\IdeaProject\\untitledDemo\\p.txt"));
//Student类要实现Serializable接口
Student s = new Student("Nina",20);
oos.writeObject(s);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\IdeaProject\\untitledDemo\\p.txt"));
Object object = ois.readObject();
Student s = (Student) object;
System.out.println(s.getName());
System.out.println(s.getAge());
强烈建议给序列化所属的类加上:
private static final Long serialVersionUID=42L;
以防因编译器版本等问题出现的序列号不匹配问题:InvalidClassException
如果类中的某个成员变量不想参与序列化,可以用transient关键词修饰。
Properties
Properties继承HashMap,可以保存到流中或从流中加载。
Properties作为Map集合使用:
Properties properties = new Properties();
properties.put("1","Nina");
properties.put("2","Nina2");
properties.put("3","Nina3");
Set<Object> keySet = properties.keySet();
for (Object key:keySet){
Object o = properties.get(key);
System.out.println("key: "+key+" value: "+o);
}
示例:
Properties prop = new Properties();
prop.setProperty("1","Nina");
prop.setProperty("2","Mike");
prop.setProperty("3","Yuanning");
System.out.println(prop);
System.out.println(prop.getProperty("1"));
Set<String> names = prop.stringPropertyNames();
for (String name:names){
System.out.println(prop.getProperty(name));
}
打印结果: