在Java中编写函数,以便在文件中读取和写入数据
发布时间:2023-06-11 03:52:45
在Java中,我们可以使用输入/输出流(Input/Output Stream)来读取和写入文件中的数据。I/O流的优点在于,即使文件非常大,它们也可以流式地处理数据,不会占用大量内存。
Java提供了许多I/O流类。其中,我们主要使用以下三种流来读写文件:
1. FileInputStream/FileOutputStream
FileInputStream和FileOutputStream流用于读写二进制文件(如图片、音频和视频文件)。它们的构造函数都需要指定文件路径。使用这两种流时,我们可以通过read()和write()方法分别读取和写入单个字节或字节数组,例如:
FileInputStream fis = new FileInputStream("file.bin");
int b = fis.read(); // 读取一个字节
byte[] buffer = new byte[1024];
int len = fis.read(buffer); // 最多从文件中读取1024个字节
FileOutputStream fos = new FileOutputStream("newfile.bin");
fos.write(b); // 写入一个字节
fos.write(buffer, 0, len); // 写入读取到的字节数组中的len个字节
2. FileReader/FileWriter
FileReader和FileWriter流用于读写文本文件。它们的构造函数也需要指定文件路径。使用这两种流时,我们可以通过read()和write()方法分别读取和写入单个字符或字符数组,例如:
FileReader fr = new FileReader("file.txt");
int c = fr.read(); // 读取一个字符
char[] buffer = new char[1024];
int len = fr.read(buffer); // 最多从文件中读取1024个字符
FileWriter fw = new FileWriter("newfile.txt");
fw.write(c); // 写入一个字符
fw.write(buffer, 0, len); // 写入读取到的字符数组中的len个字符
3. BufferedReader/BufferedWriter
BufferedReader和BufferedWriter流也用于读写文本文件。它们的构造函数需要使用FileReader和FileWriter作为参数。使用这两种流时,我们可以通过readLine()和write()方法分别读取和写入文本行,例如:
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
String line;
while ((line = br.readLine()) != null) { // 逐行读取文件内容
// 对每一行进行处理
}
br.close();
BufferedWriter bw = new BufferedWriter(new FileWriter("newfile.txt"));
bw.write("Hello, world!");
bw.newLine(); // 写入一行空白行
bw.write("Hello, Java!");
bw.close();
需要注意的是,I/O操作可能会抛出IOException异常,因此我们需要进行异常处理。此外,在使用完I/O流后,也需要显式地关闭它们以释放资源。最好在try-catch-finally语句块中进行I/O操作,如下所示:
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("file.txt");
br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
// 对每一行进行处理
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) br.close();
if (fr != null) fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
