欢迎访问宙启技术站
智能推送

在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();
  }
}