一、使用 FileReader 对文件进行读取

  1. 实例化一个文件对象
  2. 使用该文件对象初始化一个 FileReader 对象
  3. 通过 FileReader 的 read 方法来读取数据
  4. 最后文件流一定要进行关闭
    虽然GC有自带的垃圾回收算法机制,但是对物理连接(数据库,socket连接,文件流连接)是无能为力的。
  5. 读入的文件是一定要存在的,不然会在实例化 FileReader 的时候会报异常
    1. public class FileReaderWriterTest {
    2. @Test
    3. public void FileReaderTest() {
    4. File file = new File("hello.txt");
    5. FileReader fileReader = null;
    6. char[] buffer = new char[1024];
    7. int len;
    8. try{
    9. fileReader = new FileReader(file);
    10. while((len = fileReader.read(buffer)) != -1){
    11. for(int i = 0;i < len;i++){
    12. System.out.print(buffer[i]);
    13. }
    14. }
    15. }catch (IOException e){
    16. e.printStackTrace();
    17. }finally {
    18. if(fileReader != null){
    19. try {
    20. fileReader.close();
    21. } catch (IOException e) {
    22. e.printStackTrace();
    23. }
    24. }
    25. }
    26. }
    27. }

    两种 read 方式

    read() 是返回读入到的一个字符。如果读取到了文件末尾,那么返回 -1

通过一个个字符读取

  1. @Test
  2. public void FileReaderTest2(){
  3. File file = new File("hello.txt");
  4. FileReader fileReader = null;
  5. int data;
  6. try{
  7. FileReader reader = new FileReader(file);
  8. while((data = reader.read()) != -1){
  9. System.out.print((char)data);
  10. }
  11. }catch (IOException e){
  12. e.printStackTrace();
  13. }finally {
  14. if(fileReader != null){
  15. try {
  16. fileReader.close();
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. }
  22. }

直接读取到字符数组中

  1. public class FileReaderWriterTest {
  2. @Test
  3. public void FileReaderTest() {
  4. File file = new File("hello.txt");
  5. FileReader fileReader = null;
  6. char[] buffer = new char[1024];
  7. int len;
  8. try{
  9. fileReader = new FileReader(file);
  10. while((len = fileReader.read(buffer)) != -1){
  11. for(int i = 0;i < len;i++){
  12. System.out.print(buffer[i]);
  13. }
  14. }
  15. }catch (IOException e){
  16. e.printStackTrace();
  17. }finally {
  18. if(fileReader != null){
  19. try {
  20. fileReader.close();
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. }
  26. }
  27. }

二、使用FileWriter对文件进行写操作

说明:

  1. 输出操作,对应的 file 是可以不存在的。
    1. 如果不存在,那么输出的过程中,会自动创建该文件。
    2. 如果存在
      1. 如果流使用的构造器是:FileWriter(file,false) 或 FileWriter(file); 那么就是对原有的文件进行覆盖。
      2. 如果使用的构造器是:FileWriter(file,true) 那么就是在原有的文件末尾进行追加数据。 ```java package test17;

import org.junit.Test;

import java.io.*;

/**

  • Created By Intellij IDEA *
  • @author Xinrui Yu
  • @date 2021/12/5 14:04 星期日 */ public class FileReaderWriterTest { @Test public void FileReaderTest() {
    1. File file = new File("hello.txt");
    2. File outFile = new File("output.txt");
    3. String str = "计算机科学与技术";
    4. FileReader fileReader = null;
    5. FileWriter fileWriter = null;
    6. char[] buffer = new char[1024];
    7. int len;
    8. try{
    9. fileReader = new FileReader(file);
    10. while((len = fileReader.read(buffer)) != -1){
    11. for(int i = 0;i < len;i++){
    12. System.out.print(buffer[i]);
    13. }
    14. }
    15. }catch (IOException e){
    16. e.printStackTrace();
    17. }finally {
    18. if(fileReader != null){
    19. try {
    20. fileReader.close();
    21. } catch (IOException e) {
    22. e.printStackTrace();
    23. }
    24. }
    25. }
    26. try{
    27. fileWriter = new FileWriter(outFile);
    28. fileWriter.write(str);
    29. }catch (IOException e){
    30. e.printStackTrace();
    31. }finally {
    32. if(fileWriter != null){
    33. try {
    34. fileWriter.close();
    35. } catch (IOException e) {
    36. e.printStackTrace();
    37. }
    38. }
    39. }
    } }

```