[关闭]
@liruiyi962464 2017-03-23T03:52:52.000000Z 字数 3740 阅读 498

IO Reader、Writer:字符流读写类

java

  • 字符流读取字符,先读取到字节数组,然后转为字符
  • 字符流写出字符,需要把字符转为字节再写出
  • 只能是操作文本文件
  • 不可以拷贝非文本文件
  • 写出的时候会有一个小缓冲区 2k
  • 如果复制文本文件,不建议使用字符流

Reader:字符流读取

  1. public class Test1_Reader {
  2. public static void main(String[] args) throws Exception {
  3. FileReader fr = new FileReader("E:/JavaTaskIO/123.txt");
  4. int len = -1;
  5. while((len=fr.read())!=-1){
  6. System.out.print((char)len);
  7. }
  8. fr.close();
  9. }
  10. }

Writer:字符流写出

  1. public class Test2_Writer {
  2. public static void main(String[] args) throws Exception {
  3. FileWriter fw = new FileWriter(new File("E:/JavaTaskIO/456.txt"));
  4. fw.write("我是新添加的。");
  5. fw.write("helloword");
  6. fw.close();
  7. }
  8. }

FileRWCopy:拷贝(不建议使用)

  1. public class Test_FileRWCopy {
  2. public static void main(String[] args) throws Exception {
  3. //创建一个读入字符流
  4. FileReader fr = new FileReader("E:/JavaTaskIO/fr.doc");
  5. //创建一个写出的字符流
  6. FileWriter fw = new FileWriter(new File("E:/JavaTaskIO/fw.doc"));
  7. int len = -1;
  8. while((len=fr.read())!=-1){
  9. fw.write(len);
  10. }
  11. fr.close();
  12. fw.close();
  13. }
  14. }

自定义缓存区

  1. public class Test4_FileWRBuffer {
  2. public static void main(String[] args) throws Exception {
  3. // 创建一个读入字符流
  4. FileReader fr = new FileReader("E:/JavaTaskIO/123.txt");
  5. // 创建一个写出的字符流
  6. FileWriter fw = new FileWriter(new File("E:/JavaTaskIO/123.doc"));
  7. char[] buffer = new char[1024 * 200];// 自定义缓冲
  8. int len = 0;
  9. while ((len = fr.read(buffer)) != -1) {
  10. fw.write(buffer, 0, len);
  11. }
  12. fr.close();
  13. fw.close();
  14. }
  15. }

系统缓存区

  1. public class Test5_BufferWR {
  2. public static void main(String[] args) throws Exception {
  3. // 创建一个读入字符流
  4. FileReader fr = new FileReader("E:/JavaTaskIO/123.txt");
  5. // 创建一个写出的字符流
  6. FileWriter fw = new FileWriter(new File("E:/JavaTaskIO/789.doc"));
  7. //创建一个带缓冲区的字符输入流
  8. BufferedReader br = new BufferedReader(fr);
  9. //创建一个带缓冲区的字符输入流 修改缓存区大小
  10. BufferedWriter bw = new BufferedWriter(fw,1024*200);
  11. int len = -1;
  12. while((len = br.read())!=-1){
  13. bw.write(len);
  14. }
  15. br.close();
  16. bw.close();
  17. }
  18. }

行读字符

  1. public class Test_行读代码 {
  2. public static void main(String[] args) throws Exception {
  3. // 创建一个读入字符流
  4. FileReader fr = new FileReader("E:/JavaTaskIO/444.txt");
  5. // 创建一个写出的字符流
  6. FileWriter fw = new FileWriter(new File("E:/JavaTaskIO/555.txt"));
  7. // 创建一个带缓冲区的字符输入流
  8. BufferedReader br = new BufferedReader(fr);
  9. // 创建一个带缓冲区的字符输入流
  10. BufferedWriter bw = new BufferedWriter(fw);
  11. String line = null;
  12. //br.readLine() 一行一行读
  13. while ((line = br.readLine()) != null) {
  14. bw.write(line);
  15. //bw.write("\r\n");//\r 回车 (windows)换行
  16. bw.newLine();//(跨平台)换行
  17. }
  18. br.close();
  19. bw.close();
  20. }
  21. }

反转输出_字符流

  1. public class Test_反转输出_字符流 {
  2. /*
  3. * 复制一个文件,原来是第一行,复制后变成最后一行
  4. * */
  5. public static void main(String[] args) throws Exception {
  6. /*
  7. * File file = new File("E:/JavaTaskIO/444.txt");
  8. * FileReader fr = new FileReader(file);
  9. * BufferefReader br = new BufferefReader(fr);
  10. * */
  11. // 创建一个带缓冲区的字符输入流
  12. BufferedReader br = new BufferedReader(new FileReader(new File("E:/JavaTaskIO/444.txt")));
  13. // 创建一个带缓冲区的字符输入出流
  14. BufferedWriter bw = new BufferedWriter(new FileWriter(new File("E:/JavaTaskIO/666.txt")));
  15. String line = null;
  16. List<String> list = new ArrayList<String>();
  17. while ((line = br.readLine()) != null) {
  18. list.add(line);
  19. }
  20. for(int i =list.size()-1;i>=0;i--){
  21. bw.write(list.get(i));
  22. bw.newLine();
  23. }
  24. br.close();
  25. bw.close();
  26. }
  27. }

InputStreamReader && OutputStreamWriter

  1. public class Test1_IOStreamRW {
  2. public static void main(String[] args) throws Exception {
  3. // 将字节流转成字符流
  4. InputStreamReader isr = //输入
  5. new InputStreamReader
  6. (new FileInputStream
  7. (new File("E:/JavaTaskIO/444.txt")),"Gbk");
  8. OutputStreamWriter osw = //输出
  9. new OutputStreamWriter
  10. (new FileOutputStream
  11. (new File("E:/JavaTaskIO/777.txt")), "GBK");
  12. int len = 0;
  13. while((len = isr.read())!=-1){
  14. System.out.print((char)len);
  15. osw.write(len);
  16. }
  17. isr.close();
  18. osw.close();
  19. }
  20. }

ObjectInput(序列化) && OutputStream(反序列化)

  • 对对象的持久化存储,就是将自定的对象永久存储
  • 这个过程叫序列化,在读出来,叫反序列化
  • 被序列化的对象必须实现Serializable接口
  1. public class Test8_ObjectInput_OutputStream {
  2. public static void main(String[] args) throws Exception {
  3. ObjectOutputStream oos = //写入
  4. new ObjectOutputStream
  5. (new FileOutputStream
  6. (new File("E:/JavaTaskIO/ios.txt")));
  7. Student student = new Student("张三", 16);
  8. oos.writeObject(student);
  9. oos.close();
  10. ObjectInputStream ois = //读出
  11. new ObjectInputStream
  12. (new FileInputStream
  13. (new File("E:/JavaTaskIO/ios.txt")));
  14. Student student2 = (Student) ois.readObject();
  15. System.out.println(student2);
  16. ois.close();
  17. }
  18. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注