黑马程序员技术交流社区

标题: 【Java基础学习】搬来了我的io学习笔记_字符流操作【上】 [打印本页]

作者: 胡天杭    时间: 2014-8-27 01:03
标题: 【Java基础学习】搬来了我的io学习笔记_字符流操作【上】
本帖最后由 胡天杭 于 2014-8-27 01:03 编辑

1、FileWriter
  1. package com.itheima.io;

  2. import java.io.FileWriter;
  3. import java.io.IOException;

  4. /**
  5. * 字符流和字节流:
  6. *
  7. * 字节流两个基类: InputStream OutputStream
  8. *
  9. * 字符流两个基类: Reader Writer
  10. *
  11. * 字符流的特点。
  12. *
  13. * 以操作文件为主演示: 需求:在硬盘上,创建一个文件并写入一些文字数据
  14. * 找到一个专门用于操作文件的Writer子类对象。FileWrite。后缀名是父类名。前缀名是该流对象的功能。
  15. *
  16. * @author StephenHu
  17. *
  18. */
  19. public class FileWriterDemo {

  20.         /**
  21.          * @param args
  22.          * @throws IOException
  23.          */
  24.         public static void main(String[] args) throws IOException {
  25.                 // 创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件
  26.                 // 而且该文件会被创建到指定目录下。并覆盖同名文件
  27.                 // 该步骤就是明确数据要存放的目的地
  28.                 FileWriter fw = new FileWriter("D:\\javaDemo\\test.txt");

  29.                 // 调用write方法,将字符串写入到流中。
  30.                 fw.write("hahahahah");
  31.                 // 刷新流对象中缓冲的数据
  32.                 // 将数据刷到目的文件中
  33.                 fw.flush();
  34.                 fw.write("wwwwwww");
  35.                 fw.flush();
  36.                 fw.write("333hahahahah");
  37.                 // 关闭流资源,但关闭前会flush一次
  38.                 fw.close();

  39.                 // IO异常处理
  40.                 FileWriter fw1 = null;
  41.                 try {
  42.                         fw1 = new FileWriter("h:\\javaDemo\\test1.txt");
  43.                         fw1.write("hhhhhhhh");
  44.                 } catch (IOException e) {
  45.                         System.out.println("catch1:" + e.toString());
  46.                 } finally {
  47.                         try {
  48.                                 if (fw1 != null) {
  49.                                         fw1.close();
  50.                                 }
  51.                         } catch (IOException e) {
  52.                                 System.out.println("catch2:" + e.toString());
  53.                         }
  54.                 }
  55.                 /*
  56.                  * 对已有文件的续写
  57.                  */
  58.                 FileWriter fw2 = null;
  59.                 try {
  60.                         // 传递一个true参数,代表不覆盖已有的文件
  61.                         fw2 = new FileWriter("D:\\javaDemo\\test.txt", true);
  62.                         fw2.write("\n\r\n\rwwwww");
  63.                 } catch (IOException e) {
  64.                         System.out.println("catch1:" + e.toString());
  65.                 } finally {
  66.                         try {
  67.                                 if (fw2 != null) {
  68.                                         fw2.close();
  69.                                 }
  70.                         } catch (IOException e) {
  71.                                 System.out.println("catch2:" + e.toString());
  72.                         }
  73.                 }
  74.         }
  75. }
复制代码


2、FileReader
  1. package com.itheima.io;

  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.IOException;

  5. public class FileReaderDemo {

  6.         public static void main(String[] args) throws IOException {

  7.                 // 创建一个文件读取流对象,和指定名称的文件相关联
  8.                 // 要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException

  9.                 FileReader fr = new FileReader("D:\\javaDemo\\test.txt");

  10.                 // 调用读取流对象的read方法
  11.                 // read方法一次读一个字符,而且自动继续往下读
  12.                 int ch = 0;
  13.                 String str = "";
  14.                 while ((ch = fr.read()) != -1) {
  15.                         str += (char) ch;
  16.                 }
  17.                 p(str);
  18.                 fr.close();

  19.                 // 定义一个字符数组,用于存储独到的字符
  20.                 // 改read(char[])返回的是独到的字符个数
  21.                 FileReader fr1 = new FileReader("D:\\javaDemo\\test.txt");
  22.                 char[] buf = new char[1024];

  23.                 int num = 0;
  24.                 while ((num = fr1.read(buf)) != -1) {
  25.                         p(new String(buf, 0, num));
  26.                 }
  27.                 fr1.close();

  28.                 // 读取一个.java文件,并打印在控制台上
  29.                 FileReader fr2 = new FileReader(
  30.                                 "D:\\javaWorkspace\\Practices\\src\\com\\itheima\\io\\DateDemo.java");
  31.                 char[] buf1 = new char[1024];
  32.                 int num1 = 0;
  33.                 while ((num1 = fr2.read(buf1)) != -1) {
  34.                         System.out.print(new String(buf1, 0, num1));
  35.                 }
  36.                 fr2.close();
  37.         }

  38.         private static void p(Object o) {
  39.                 System.out.println(o);
  40.         }
  41. }
复制代码

3、简单的字符串文件拷贝
  1. package com.itheima.io;

  2. import java.io.FileReader;
  3. import java.io.FileWriter;
  4. import java.io.IOException;

  5. public class CopyTextDemo {

  6.         /**
  7.          * 将C盘一个文本文件复制带D盘
  8.          *
  9.          * 复制原理: 其实就是讲C盘下的文件数据储存到D盘的一个文件中
  10.          *
  11.          *
  12.          * 1、在D盘创建一个文件,用于储存C盘文件中的数据 2、定义读取流和C盘文件关联 3、通过不断的读写完成数据存储
  13.          *
  14.          * @throws IOException
  15.          *
  16.          */
  17.         public static void main(String[] args) throws IOException {
  18.                 // TODO Auto-generated method stub
  19.                 // copy_1();
  20.                 copy_2();
  21.         }

  22.         public static void copy_1() throws IOException {
  23.                 // 创建目的地
  24.                 FileWriter fw = new FileWriter("D:\\javaDemo\\testTo.txt");

  25.                 // 与已有文件关联
  26.                 FileReader fr = new FileReader("D:\\javaDemo\\testFrom.txt");

  27.                 int ch = 0;
  28.                 while ((ch = fr.read()) != -1) {
  29.                         fw.write(ch);
  30.                 }
  31.                 fw.close();
  32.                 fr.close();
  33.         }

  34.         public static void copy_2() {
  35.                 FileWriter fw = null;
  36.                 FileReader fr = null;
  37.                 try {
  38.                         fw = new FileWriter("D:\\javaDemo\\testCopyTo.txt");
  39.                         fr = new FileReader("D:\\javaDemo\\test.txt");

  40.                         char[] buf = new char[1024];
  41.                         int len = 0;
  42.                         while ((len = fr.read(buf)) != -1) {
  43.                                 fw.write(buf, 0, len);
  44.                         }
  45.                 } catch (IOException e) {
  46.                         // TODO: handle exception
  47.                         throw new RuntimeException("读写失败");
  48.                 } finally {
  49.                         if (fr != null && fw != null) {
  50.                                 try {
  51.                                         fw.close();
  52.                                         fr.close();
  53.                                 } catch (IOException e) {
  54.                                         e.printStackTrace();
  55.                                 }
  56.                         }
  57.                 }
  58.         }

  59. }<strong>
  60. </strong>
复制代码


4、问了提高效率,利用缓冲区写文件
  1. package com.itheima.io;

  2. import java.io.BufferedWriter;
  3. import java.io.FileWriter;
  4. import java.io.IOException;

  5. public class BufferedWriterDemo_2_1 {

  6. /**
  7. * 缓冲区的出现是为了提高流的操作效率而出现的 所以创建缓冲区之前,必须先有流对象
  8. */
  9. public static void main(String[] args) {
  10. // 创建一个字符写入流对象
  11. FileWriter fw = null;
  12. BufferedWriter bw = null;
  13. try {
  14. fw = new FileWriter(".\\testData\\buf.txt");

  15. // 为了提高字符写入流效率,加入了缓冲技术
  16. // 使用方法:讲需要提高效率的流对象作为参数传递给缓冲区的构造函数
  17. bw = new BufferedWriter(fw);
  18. for (int i = 0; i < 5; i++) {
  19. bw.write("hhhhhhhh" + i);
  20. bw.newLine();
  21. bw.flush();
  22. }

  23. } catch (IOException e) {
  24. throw new RuntimeException("读写失败!");
  25. } finally {

  26. // 关闭了缓冲区,就是关闭了缓冲区中的流对象,因为是缓冲区在读取数据
  27. try {
  28. if (bw != null)
  29. bw.close();
  30. } catch (IOException e) {
  31. throw new RuntimeException("关闭失败!");
  32. }
  33. }

  34. }

  35. }<strong>
  36. </strong>
复制代码

5、利用缓冲区读文件
  1. package com.itheima.io;

  2. import java.io.BufferedReader;
  3. import java.io.FileReader;
  4. import java.io.IOException;

  5. public class BufferedReaderDemo_2_2 {

  6. /**
  7. * 字符读取流缓冲区
  8. * 改缓冲区提供了一个一次读一行的方法readline(),方便于对文本数据的获取
  9. *
  10. */
  11. public static void main(String[] args) {
  12. // 创建读取流对象和文件关联
  13. FileReader fr = null;
  14. BufferedReader br = null;
  15. try {
  16. fr = new FileReader(".\\testData\\buf.txt");

  17. // 用缓冲区读取提高效率
  18. br = new BufferedReader(fr);
  19. String line="";
  20. while((line=br.readLine())!=null){
  21. System.out.println(line);
  22. }

  23. } catch (IOException e) {
  24. throw new RuntimeException("读写失败!");
  25. } finally {
  26. try {
  27. if (br != null)
  28. br.close();
  29. } catch (IOException e) {
  30. throw new RuntimeException("关闭失败!");
  31. }
  32. }

  33. }

  34. }
复制代码





作者: 格子、    时间: 2014-8-27 07:08
楼主注意排版哈
作者: 胡天杭    时间: 2014-8-27 09:39
格子、 发表于 2014-8-27 07:08
楼主注意排版哈

求扫盲@.@




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2