1.简介:
I/O流是指用于输入和输出数据的流。I/O流可以从不同的来源读取数据,例如文件、网络连接或键盘输入,并将数据写入不同的目标,如文件、网络连接或屏幕。
在Java中,I/O流分为字节流和字符流。字节流以字节作为基本单位进行读写,适用于处理二进制数据。字符流以字符作为基本单位进行读写,适用于处理文本数据。
常见的字节流类包括InputStream和OutputStream,常见的字符流类包括Reader和Writer。这些类提供了一系列方法用于读取和写入数据。
I/O流可以按照数据流向分为输入流和输出流。输入流用于从外部读取数据,输出流用于将数据写入外部。
此外,I/O流还可以按照功能分为节点流和处理流。节点流直接与数据源或数据目标进行交互,处理流则基于节点流进行封装和功能增强。
在使用I/O流时,需要注意及时关闭流,以释放资源。可以使用try-with-resources语句来自动关闭流。
2.I/O类结构
Java语言的I/O系统有OutputStream、InputStream、Writer和Reader4个抽象类,它们是其他I/O类的基础。
下面以一段代码来展现从硬盘文件读取数据再复制到另一个文件的过程:
import java.io.*;
class FileShow {
String srcFileName; //源文件地址
String destFileName; //被粘贴的文件地址
public void GetFileName(String srcFileName, String destFileName) {
this.srcFileName = srcFileName;
this.destFileName = destFileName;
}
//将源文件srcFileName复制到目标文件destFileName
public void copyFile() {
File sourceFile = new File(srcFileName);
File destinationFile = new File(destFileName);
try (FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(destinationFile)) {
byte[] bytes = new byte[1024];
//bytes数组作为缓冲区来存储从源文件读取的数据,然后再将这些数据写入到目标文件中。
int bytesRead = 0;
while ((bytesRead = fis.read(bytes)) != -1) {
fos.write(bytes,0,bytesRead);
}
//read()和 write()方法分别用于从源文件中读取数据和将数据写入目标文件。
} catch (IOException e) {
e.printStackTrace();
}
//使用了try-with-resources语句,因此当try代码块执行完毕后,这两个流会自动关闭,无需显式调用close方法。
System.out.println("文件复制成功!");
}
}
public class Show {
public static void main(String[] args) {
FileShow fileShow = new FileShow();
fileShow.GetFileName("D:\\JavaProgram\\1.txt", "D:\\JavaProgram\\2.txt");
fileShow.copyFile();
}
}
当代码正确执行完毕后,指定的复制粘贴路径会自动生成2.txt文档,并将1.txt的内容复制粘贴到2.txt上