io流

80 阅读2分钟

1. 使用字节流

读文件 (使用 FileInputStream)

java
import java.io.FileInputStream;
import java.io.IOException;

public class FileReadByteStream {
    public static void main(String[] args) {
        // FileInputStream用于读取文件的字节输入流
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            int content;
            // 逐字节读取文件内容,直到文件末尾
            while ((content = fis.read()) != -1) {
                // 将字节转换为字符并打印
                System.out.print((char) content);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

写文件 (使用 FileOutputStream)

java
import java.io.FileOutputStream;
import java.io.IOException;

public class FileWriteByteStream {
    public static void main(String[] args) {
        String data = "Hello, World!";
        // FileOutputStream用于写入文件的字节输出流
        try (FileOutputStream fos = new FileOutputStream("example.txt")) {
            // 将字符串转换为字节数组并写入文件
            fos.write(data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 使用字符流

读文件 (使用 FileReader)

java
import java.io.FileReader;
import java.io.IOException;

public class FileReadCharStream {
    public static void main(String[] args) {
        // FileReader用于读取文件的字符输入流
        try (FileReader fr = new FileReader("example.txt")) {
            int content;
            // 逐字符读取文件内容,直到文件末尾
            while ((content = fr.read()) != -1) {
                // 打印读取的字符
                System.out.print((char) content);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

写文件 (使用 FileWriter)

java
import java.io.FileWriter;
import java.io.IOException;

public class FileWriteCharStream {
    public static void main(String[] args) {
        String data = "Hello, World!";
        // FileWriter用于写入文件的字符输出流
        try (FileWriter fw = new FileWriter("example.txt")) {
            // 将字符串写入文件
            fw.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 使用缓冲流

读文件 (使用 BufferedReader)

java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReadBufferedStream {
    public static void main(String[] args) {
        // BufferedReader用于高效读取字符输入流
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            // 按行读取文件内容,直到文件末尾
            while ((line = br.readLine()) != null) {
                // 打印读取的行
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

写文件 (使用 BufferedWriter)

java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriteBufferedStream {
    public static void main(String[] args) {
        String data = "Hello, World!";
        // BufferedWriter用于高效写入字符输出流
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
            // 将字符串写入文件
            bw.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 使用NIO

读文件 (使用 Files.readAllLines)

java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class FileReadNIO {
    public static void main(String[] args) {
        try {
            // 读取文件的所有行并返回一个列表
            List<String> lines = Files.readAllLines(Paths.get("example.txt"));
            // 打印每一行
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

写文件 (使用 Files.write)

java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
import java.util.List;

public class FileWriteNIO {
    public static void main(String[] args) {
        List<String> lines = Arrays.asList("Hello, World!", "Welcome to NIO.");
        try {
            // 将列表中的所有行写入文件,如果文件不存在则创建文件
            Files.write(Paths.get("example.txt"), lines, StandardOpenOption.CREATE);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

  • 字节流 (FileInputStream / FileOutputStream) : 适用于处理二进制文件(如图片、音频)。字节流处理单个字节。
  • 字符流 (FileReader / FileWriter) : 适用于处理文本文件。字符流处理单个字符或字符串。
  • 缓冲流 (BufferedReader / BufferedWriter) : 提高文件读写效率,适用于读写大文件或频繁操作。缓冲流通过内部缓冲区减少实际IO操作的次数。
  • NIO (Files.readAllLines / Files.write) : 更高效的文件操作方式,适用于需要高性能文件读写操作。NIO (New IO) 提供了非阻塞IO操作和更高效的文件处理方法。

选择适合的文件读写方式可以显著提高程序的效率和可读性。这些示例展示了如何在Java中进行文件读写操作,并且每个示例都配有详细的注释,便于理解和学习。

附一张思维导图

图片.png