一、字节流:
-
处理单位:
- 字节流以字节(8位二进制数据)为单位处理数据。
-
主要类:
- 输入流:
InputStream
是所有字节输入流的基类。 - 输出流:
OutputStream
是所有字节输出流的基类。
- 输入流:
-
应用场景:
- 适合处理二进制文件,如图像、音频、视频等。
- 适合处理网络传输数据,因为网络通信通常基于字节流。
- 适合处理任何非文本数据。
-
常用类:
FileInputStream
和FileOutputStream
:用于从文件中读取和写入字节数据。ByteArrayInputStream
和ByteArrayOutputStream
:用于从字节数组中读取和写入字节数据。Socket.getInputStream()
和Socket.getOutputStream()
:用于从网络连接中读取和写入字节数据
1、写入方式:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//字节流写入
public class xieru {
public static void main(String[] args) {
//定义字符串变量,存入要写入的值
String data="hello";
try {
//创建一个 FileOutputStream 对象,用于写入名为 "data.txt" 的文件。
// 如果文件不存在,它将被创建;如果文件已存在,它的内容将被覆盖。
FileOutputStream fileOutputStream = new FileOutputStream("data.txt");
//这里使用 getBytes() 方法将字符串转换为字节数组,并通过 FileOutputStream 写入文件。
fileOutputStream.write(data.getBytes());
//这会在尝试打开不存在的文件时抛出。
} catch (FileNotFoundException e) {
//抛出一个新的 RuntimeException,并将原始异常作为原因传递给构造函数。
throw new RuntimeException(e);
//捕获 IOException,这会在 I/O 操作中出现错误时抛出。
} catch (IOException e) {
//同样抛出一个新的 RuntimeException,并将原始异常作为原因传递给构造函数。
throw new RuntimeException(e);
}
}
}
2、读取方式:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
//从文件读取数据
public class duqu {
public static void main(String[] args) throws IOException {
//创建一个 FileInputStream 对象,用于读取名为 "data.txt" 的文件。
FileInputStream fileInputStream = new FileInputStream("data.txt");
int data;
//循环读取文件中的数据。read() 方法每次读取一个字节
// 如果文件结束,则返回 -1。
while ((data=fileInputStream.read())!=-1){
//将读取到的字节转换为字符并打印出来。
System.out.println((char)data);
}
}
}
二、字符流:
-
处理单位:
- 字符流以字符(通常是 16 位 Unicode 字符)为单位处理数据。
-
主要类:
- 输入流:
Reader
是所有字符输入流的基类。 - 输出流:
Writer
是所有字符输出流的基类。
- 输入流:
-
应用场景:
- 适合处理文本文件,如纯文本、XML、HTML 等。
- 适合处理需要编码/解码的数据,因为字符流可以指定字符集。
-
常用类:
FileReader
和FileWriter
:用于从文件中读取和写入字符数据。BufferedReader
和BufferedWriter
:用于提高读写效率,通常与FileReader
和FileWriter
结合使用。InputStreamReader
和OutputStreamWriter
:用于将字节流转换为字符流,允许指定字符集。
1、写入:
import java.io.FileWriter;
import java.io.IOException;
//字符流 写数据
public class xieru2 {
public static void main(String[] args) throws IOException {
//定义要写入的字符串
String data="我是影片中";
//找到data2.txt文件,如果没有就新建,有就覆盖
FileWriter fileWriter = new FileWriter("data2.txt");
//将字符串写入文件。
fileWriter.write(data);
//这行代码用于关闭 FileWriter 对象。
//关闭 FileWriter 对象时,会自动调用 flush() 方法以确保所有缓冲区中的数据都被写入文件。
//此外,关闭 FileWriter 对象还会释放与之关联的系统资源。
fileWriter.close();
}
}
2、读取:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
//读操作 文件=》内存=》控制台 字符流
public class duqu2 {
public static void main(String[] args) throws IOException {
//创建一个 FileReader 对象,用于读取名为 "data2.txt" 的文件。
FileReader fileReader = new FileReader("data2.txt");
// 定义一个 int 类型的变量 chars,用于存储从文件中读取的每个字符。
int chars;
//循环读取文件中的数据。read() 方法每次读取一个字符
// 如果文件结束,则返回 -1。
while ((chars= fileReader.read())!=-1){
//将读取到的字符打印到控制台。
System.out.println((char) chars);
}
}
}