Java(转换流,序列化流,打印流,commons-io工具包)

目录

一.转换流

二.序列化流与反序列化流

三.打印流

四.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();

四.commons-IO工具包

导入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);文件夹复制

你可能感兴趣的:(java)