1.什么是IO流?
流指的是数据从源点传输到汇点的管道而已。(就是从这头到那头)
2.流的分类有几种?
按照方向分: 输入流 输出流 *:参照物:对以计算机而言
按照单位分: 字节流 字符流
按照功能分: 节点流 过滤流
节点流(针头:能够直接连接文件的) 过滤流(针管:不能直接连接文件,只能连接其他的节点流)
3.从字节流和字符流的角度分析一下流?
1.字节流:
所有字节流输入流的父类==>InputStream
所有字节流输出流的父类==>OutputStream
(1)节点流:
①FileInputStream FileOutputStream ==>只能连接文件,不能连接目录,构造方法允许传入String路径或File对象。
(2)过滤流:
①BufferedInputStream BufferedOutputStream==>不能连接文件,只能连接其他的节点流。
作用:给原本的节点流添加缓存空间,提高每次读写的吞吐量,从而提高效率
②DataInputStream DataOutputStream ==>给原本的节点流添加读写基本数据类型的功能的,不能直接连接文件 只能连接其它的节点流
③ObjectInputStream ObjectOutputStream ==>给原本的节点流添加读写对象的功能的,不能直接连接文件 只能连接其它的节点流
2.字符流:
所有字符流输入流的父类==>Reader
所有字符流输出流的父类==>Writer
(1)节点流:
FileReader FileWriter==>只能连接文件,不能连接目录,构造方法允许传入String路径/File对象
(在对文件进行写入操作时,一般不使用FileWriter,一般使用PrintWriter)
PrintWriter 和 PrintStream 都是对文件进行写入操作的,只不过写入的方式不同,PrintWriter是以字符的形式将数据写入文件,而PrintStream是以字节的形式将数据写入到文件的
(2)过滤流:
BufferedReader BufferedWriter ==>不能直接连接文件 只能连接其它的节点流
4.怎么把一个文件复制到 e 盘目录下?
FileInputStream fis = new FileInputStream("user.txt");
FileOutputStream fos = new FileOutputStream("e:\user-service");
byte[] data = new byte[16384];
int len;
while((len = fis.read(data))!=-1){
fos.write(data,0,len);
}
fis.close();
fos.close();
5.将c盘下的test.txt文件读取,将含有Exception的键值对的值放在expection.txt文件里用IO流怎么写??
首先读取C盘下的test.txt文件,查找含有"Exception"的键值对,并将它们写入expection.txt文件中
import java.io.*;
public class ExceptionKeyValueExtractor {
public static void main(String[] args) {
// 输入文件路径
String inputFilePath = "C:/test.txt";
// 输出文件路径
String outputFilePath = "C:/expection.txt";
try {
// 创建输入流读取test.txt文件
BufferedReader reader = new BufferedReader(new FileReader(inputFilePath));
// 创建输出流写入expection.txt文件
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath));
String line;
while ((line = reader.readLine()) != null) {
// 查找含有"Exception"的键值对
if (line.contains("Exception")) {
// 写入含有"Exception"的键值对到expection.txt文件
writer.write(line);
writer.newLine();
}
}
// 关闭流
reader.close();
writer.close();
System.out.println("提取完成。");
} catch (IOException e) {
e.printStackTrace();
}
}
}