1.FileReader/FileWriter的使用:

1.1 FileReader的使用

  1. /*
  2. 将day09下的hello.txt文件内容读入程序中,并输出到控制台
  3. 说明点:
  4. 1. read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1
  5. 2. 异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理
  6. 3. 读入的文件一定要存在,否则就会报FileNotFoundException。
  7. */
  8. @Test
  9. public void testFileReader1() {
  10. FileReader fr = null;
  11. try {
  12. //1.File类的实例化
  13. File file = new File("hello.txt");
  14. //2.FileReader流的实例化
  15. fr = new FileReader(file);
  16. //3.读入的操作
  17. //read(char[] cbuf):返回每次读入cbuf数组中的字符的个数。如果达到文件末尾,返回-1
  18. char[] cbuf = new char[5];
  19. int len;
  20. while((len = fr.read(cbuf)) != -1){
  21. //方式一:
  22. //错误的写法
  23. // for(int i = 0;i < cbuf.length;i++){
  24. // System.out.print(cbuf[i]);
  25. // }
  26. //正确的写法
  27. // for(int i = 0;i < len;i++){
  28. // System.out.print(cbuf[i]);
  29. // }
  30. //方式二:
  31. //错误的写法,对应着方式一的错误的写法
  32. // String str = new String(cbuf);
  33. // System.out.print(str);
  34. //正确的写法
  35. String str = new String(cbuf,0,len);
  36. System.out.print(str);
  37. }
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. } finally {
  41. if(fr != null){
  42. //4.资源的关闭
  43. try {
  44. fr.close();
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. }
  50. }

1.2 FileWriter的使用

  1. /*
  2. 从内存中写出数据到硬盘的文件里。
  3. 说明:
  4. 1. 输出操作,对应的File可以不存在的。并不会报异常
  5. 2.
  6. File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。
  7. File对应的硬盘中的文件如果存在:
  8. 如果流使用的构造器是:FileWriter(file,false) / FileWriter(file):对原文件的覆盖
  9. 如果流使用的构造器是:FileWriter(file,true):不会对原文件覆盖,而是在原文件基础上追加内容
  10. */
  11. @Test
  12. public void testFileWriter() {
  13. FileWriter fw = null;
  14. try {
  15. //1.提供File类的对象,指明写出到的文件
  16. File file = new File("hello1.txt");
  17. //2.提供FileWriter的对象,用于数据的写出
  18. fw = new FileWriter(file,false);
  19. //3.写出的操作
  20. fw.write("I have a dream!\n");
  21. fw.write("you need to have a dream!");
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. } finally {
  25. //4.流资源的关闭
  26. if(fw != null){
  27. try {
  28. fw.close();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }
  34. }

1.3 文本文件的复制:

  1. @Test
  2. public void testFileReaderFileWriter() {
  3. FileReader fr = null;
  4. FileWriter fw = null;
  5. try {
  6. //1.创建File类的对象,指明读入和写出的文件
  7. File srcFile = new File("hello.txt");
  8. File destFile = new File("hello2.txt");
  9. //不能使用字符流来处理图片等字节数据
  10. // File srcFile = new File("爱情与友情.jpg");
  11. // File destFile = new File("爱情与友情1.jpg");
  12. //2.创建输入流和输出流的对象
  13. fr = new FileReader(srcFile);
  14. fw = new FileWriter(destFile);
  15. //3.数据的读入和写出操作
  16. char[] cbuf = new char[5];
  17. int len;//记录每次读入到cbuf数组中的字符的个数
  18. while((len = fr.read(cbuf)) != -1){
  19. //每次写出len个字符
  20. fw.write(cbuf,0,len);
  21. }
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. } finally {
  25. //4.关闭流资源
  26. //方式一:
  27. // try {
  28. // if(fw != null)
  29. // fw.close();
  30. // } catch (IOException e) {
  31. // e.printStackTrace();
  32. // }finally{
  33. // try {
  34. // if(fr != null)
  35. // fr.close();
  36. // } catch (IOException e) {
  37. // e.printStackTrace();
  38. // }
  39. // }
  40. //方式二:
  41. try {
  42. if(fw != null)
  43. fw.close();
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. }
  47. try {
  48. if(fr != null)
  49. fr.close();
  50. } catch (IOException e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. }

2.FileInputStream / FileOutputStream的使用:

  1. 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理
  2. 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,…),使用字节流处理 ```java / 实现对图片的复制操作 / @Test public void testFileInputOutputStream() { FileInputStream fis = null; FileOutputStream fos = null; try {

    1. //1.造文件
    2. File srcFile = new File("爱情与友情.jpg");
    3. File destFile = new File("爱情与友情2.jpg");
    4. //2.造流
    5. fis = new FileInputStream(srcFile);
    6. fos = new FileOutputStream(destFile);
    7. //3.复制的过程
    8. byte[] buffer = new byte[5];
    9. int len;
    10. while((len = fis.read(buffer)) != -1){
    11. fos.write(buffer,0,len);
    12. }

    } catch (IOException e) {

     e.printStackTrace();
    

    } finally {

     if(fos != null){
         //4.关闭流
         try {
             fos.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
     if(fis != null){
         try {
             fis.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
    
     }
    

    }

}

```

【注意】

相对路径在IDEA和Eclipse中使用的区别?
IDEA:
如果使用单元测试方法,相对路径基于当前的Module的。
如果使用main()测试,相对路径基于当前Project的。

Eclipse:
单元测试方法还是main(),相对路径都是基于当前Project的。