前言:
学习IO流,记录并分享。文章如有错误,恳请指正。
Java IO流的类图:
1、什么是 Java IO 流?
数据传输是需要通道的,而IO流就是数据传输的通道。IO流可以形象比喻为运送货物的传输带。运送的货物就是数据,这里的数据有两种类型,要么是字节数据,要么是字符数据。字符的本质还是字节。
2、为什么要用 Java IO 流?
Java IO流提供了一种机制,用于在Java程序中读取和写入数据。根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。它允许您从文件、网络连接、内存等“源”读取数据,并将数据写入这些源。使用Java IO流,您可以以一种可靠的方式处理数据,而无需考虑数据源的类型或底层实现。因此,Java IO流是Java编程中不可或缺的一部分。
3、怎么用 Java IO 流?
/**
* 这些示例演示了如何使用Java IO流读取和写入文件
*
* @param args
*/
public static void main(String[] args) {
String readFilePath = "D:/test/testName.txt";
String writerFilePath = "D:/test/success/writer.txt";
reader(readFilePath);
writer(writerFilePath);
}
/**
* 读取文件中的内容并打印到控制台
*
* @param FilePath 要读取的文件路径与文件名
*/
private static void reader(String FilePath) {
try {
// 1. 创建一个输入流对象 打开数据源(如文件或网络连接)
BufferedReader reader = new BufferedReader(new FileReader(FilePath));
// 使用输入流对象读取数据
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
// 在完成读取或写入操作后,关闭数据源和输入流对象。
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @param FilePath 要写入数据的文件路径与文件名
*/
private static void writer(String FilePath) {
try {
// 1.创建一个输出流对象 打开数据源(如文件或网络连接)
BufferedWriter writer = new BufferedWriter(new FileWriter(FilePath));
// 2.使用输出流对象写入数据
writer.write("Hello World!");
// 3.在完成读取或写入操作后,关闭数据源和输出流对象。
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
4、什么是字节流,什么是字符流,他们的区别是什么?
前言:设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。
5、什么是输入流,什么是输出流?
说明:I/O流有很多种,按操作数据单位不同可分为字节流和字符流,按数据流的方向不同分为输入流和输出流,程序中需要根据待传输数据的不同特性而使用不同的流。
输入流只能进行读操作,当程序需要从某个数据源读入数据的时候,会开启一个输入流,数据源可以是文件、内存或网络等。
输出流只能进行写操作,当程序需要写入数据到数据源的时候,会开启一个输出流,数据源可以是文件、内存或网络等。
6、实战
将磁盘文件 A 的内容写入到 文件 B 中
public static void main(String[] args) throws IOException {
TestCopyIO test = new TestCopyIO();
String resourcesPath = "D:/test/gle.txt";
String targetPath = "D:/test/gls.txt";
String result = test.copy(resourcesPath, targetPath);
System.out.println(result);
}
/**
* 将磁盘文件 A 的内容写入到 文件 B 中
*
* @param resourcesPath 数据源文件
* @param targetPath 目标文件
* @return
* @throws FileNotFoundException 输入流读入数据时找不到文件的时候会抛出这个异常
* @throws IOException 可能会抛出的异常
*/
private String copy(String resourcesPath, String targetPath) throws FileNotFoundException, IOException {
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
try {
// 1.创建一个输入流对象 打开数据源(如文件或网络连接)
inputStream = new FileInputStream(resourcesPath);
// 2.获取从此输入流读取的字节数的估计值
int available = inputStream.available();
// 3.创建存储读入的数据的容器
byte[] resources = new byte[available];
// 4.输入流对象读取数据 返回字节数据并放到 resources 中
inputStream.read(resources);
// 5.创建一个输出流对象 打开数据源(如文件或网络连接)
outputStream = new FileOutputStream(targetPath);
// 6.使用输出流对象读取或写入数据
outputStream.write(resources);
return new String(resources, StandardCharsets.UTF_8);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Java IO 学习总结(二) 正在完善中,后续更新~