目录
一.转换流
二.序列化流与反序列化流
三.打印流
四.commons-IO工具包
OutputStreamWriter类
* 是字符流通向字节流的桥梁:将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
*public static void writeCN() throws Exception {
* //创建与文件关联的字节输出流对象
* FileOutputStream fos = new FileOutputStream("c:\\cn8.txt");
* //创建可以把字符转成字节的转换流对象,并指定编码
* OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
* //调用转换流,把文字写出去,其实是写到转换流的高效区中
* osw.write("你好");//写入高效区。
* osw.close();
*}
InputStreamReader类
* 是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。
* //创建读取文件的字节流对象
* InputStream in = new FileInputStream("c:\\cn8.txt");
* //创建转换流对象
* InputStreamReader isr = new InputStreamReader(in,"utf-8");
* //使用转换流去读字节流中的字节
* int ch = 0;
* while((ch = isr.read())!=-1){
* System.out.println((char)ch);
* }
* //关闭流
* isr.close();
* }
当操作的字符文件,使用的是默认编码表(gbk)时可以不用父类,可以简化了代码:
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默认GBK字符集。
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");//指定GBK字符集。
ps:使用FileReader fr = new FileReader("a.txt");代替。
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“a.txt”));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“a.txt”),”GBK”);
ps:使用FileWriter fw = new FileWriter(“a.txt”)代替。
特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。
用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流
用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流
对象序列化流:
* //1,明确存储对象的文件。
* FileOutputStream fos = new FileOutputStream("tempfile\\obj.object");
* //2,给操作文件对象加入写入对象功能。
* ObjectOutputStream oos = new ObjectOutputStream(fos);
* //3,调用了写入对象的方法。
* oos.writeObject(new Person("wangcai",20));
* //关闭资源。
* oos.close();
ps:类必须重写Serializable接口,这个接口无方法,只是个规则声明。
对象反序列化流:
* //1,定义流对象关联存储了对象文件。
* FileInputStream fis = new FileInputStream("tempfile\\obj.object");
* //2,建立用于读取对象的功能对象。
* ObjectInputStream ois = new ObjectInputStream(fis);
* Person obj = (Person)ois.readObject();
* System.out.println(obj.toString());
ps:当反序列化时,会根据对象的版本是否变化,判断类是否变化,如果版本未变化就可以反序列化,如果变化就不可以。可以把版本放在类上,自己控制以防当类修改时无法反序列化。
ps:被transient或者static修饰的属性不会被序列化进文件。
序列化总结:
1.将需要被序列化的类实现Serializable 接口,该接口没有需要实现的方法,implements Serializable 只是为了标注该对象是可被序列化的。
2.使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象。
3.使用ObjectOutputStream 对象的writeObject(Object obj)方法就可以将参数为obj 的对象写出(即保存其状态)。
4.要恢复的话则用输入流。
字节打印流 PrintStream:
* 1.字符串的文件名 2.File对象 3.OutputStream流
字符打印流 PrintWriter
* 1.字符串的文件名 2.File对象 3.OutputStream流 4.Write流
* //创建流
* //PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));*
* PrintWriter out = new PrintWriter("printFile.txt");
* //写数据
* for (int i=0; i<5; i++) {
* out.println("helloWorld");
* }
* //3,关闭流
* out.close();
导入classpath
* 加入classpath的第三方jar包内的class文件才能在项目中使用
* 使用第三方类库的步骤:
* 1.创建lib文件夹
* 2.将commons-io.jar拷贝到lib文件夹
* 3.右键点击commons-io.jar,Build Path→Add to Build Path
ps:提供文件操作(移动文件,读取文件,检查文件是否存在等等)的方法。
常用方法:
* readFileToString(File file):读取文件内容,并返回一个String;
* writeStringToFile(File file,String content):将内容content写入到file中;
* copyFile(File srcFile, File destFile): 文件复制
* copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制