您的位置:

Java文件读取和写入操作

在Java开发中,文件的读取和写入是非常常见的操作。Java提供了很多种方式来进行文件的读取和写入,如:字节流和字符流,输入/输出流,NIO和NIO2等。通过这些方式,可以轻松地实现对文件的操作,如:读取文本、图片、音频等各种格式的文件,或者将数据写入到文件中。

一、基本的文件读取和写入

Java中最基本的文件读取和写入方式是通过Java IO提供的FileInputStream和FileOutputStream实现。FileInputStream用于读取文件中的数据,FileOutputStream用于将数据写入到文件中。以下是基本的文件读取和写入操作代码:

// 读取文件
File file1 = new File("file.txt");
FileInputStream fis = new FileInputStream(file1);
byte[] content = new byte[(int)file1.length()];
fis.read(content);
fis.close();
System.out.println(new String(content));
            
// 写入文件
File file2 = new File("file.txt");
FileOutputStream fos = new FileOutputStream(file2);
String content = "Hello World!";
fos.write(content.getBytes());
fos.close();

以上代码为读取和写入一个名为“file.txt”的文件,读取时使用字节数组作为缓存区读取文件中的数据,写入时先将字符串转换为字节数组,再进行写入操作。两种操作都要及时关闭文件流。

二、使用BufferedReader和BufferedWriter读写文件

除了使用基本的字节流和字符流进行文件读写操作外,还可以使用Java IO提供的BufferedReader和BufferedWriter,它们可以提供更高效的读写操作。以下是使用缓冲区进行读写操作的示例代码:

// 读取文件
File file1 = new File("file.txt");
BufferedReader reader = new BufferedReader(new FileReader(file1));
String line = null;
while((line = reader.readLine()) != null){
    System.out.println(line);
}
reader.close();

// 写入文件
File file2 = new File("file.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file2));
String content = "Hello World!";
writer.write(content);
writer.newLine();
writer.close();

以上代码中,我们通过BufferedReader和BufferedWriter使用缓存区实现了文件的读取和写入操作。BufferedReader通过readLine()方法读取文件中的每一行数据,而BufferedWriter需要手动添加一个换行符来分隔每一行数据。

三、使用Scanner读取文件

除了以上两种方式,还可以使用Java提供的Scanner来读取文件。Scanner相当于一个读取器,它可以读取任何数据类型。以下是使用Scanner读取文件的示例代码:

// 读取文件
File file1 = new File("file.txt");
Scanner scanner = new Scanner(file1);
while(scanner.hasNextLine()){
    System.out.println(scanner.nextLine());
}
scanner.close();

// 写入文件
File file2 = new File("file.txt");
PrintWriter writer = new PrintWriter(file2);
String content = "Hello World!";
writer.println(content);
writer.close();

以上代码中,我们使用Scanner读取文件中的每一行数据,而在写入文件时,则是使用了PrintWriter。

四、使用NIO读写文件

如果需要处理大型文件或者需要实现更高效的文件读写操作,可以使用Java提供的NIO库。NIO可以以非阻塞IO方式读写文件,减少了线程的等待时间,提高了效率。以下是NIO读写文件的示例代码:

// 读取文件
Path path1 = Paths.get("file.txt");
ByteBuffer buffer = ByteBuffer.allocate(1024);
FileChannel channel1 = FileChannel.open(path1);
channel1.read(buffer);
buffer.flip();
String content = StandardCharsets.UTF_8.decode(buffer).toString();
channel1.close();

// 写入文件
Path path2 = Paths.get("file.txt");
ByteBuffer buffer = StandardCharsets.UTF_8.encode("Hello World!");
FileChannel channel2 = FileChannel.open(path2, StandardOpenOption.WRITE, StandardOpenOption.CREATE);
channel2.write(buffer);
channel2.close();

以上代码使用NIO的ByteBuffer读写文件,通过调用FileChannel的read()方法读取文件中的数据,使用StandardCharsets实现了字符集转换;写入文件时,同样使用FileChannel的write()方法向文件中写入数据。

五、使用NIO2读写文件

Java 7中引入了NIO2,它基于NIO,提供了更简洁的API。以下是NIO2读写文件的示例代码:

// 读取文件
Path path1 = Paths.get("file.txt");
List content = Files.readAllLines(path1, StandardCharsets.UTF_8);
System.out.println(content);

// 写入文件
Path path2 = Paths.get("file.txt");
List
    lines = Arrays.asList("Hello", "World");
Files.write(path2, lines, StandardCharsets.UTF_8);

   
  

以上代码使用NIO2的Files类进行文件的读取和写入操作,首先使用readAllLines()方法读取文件中的所有行,然后使用Files的write()方法将字符串列表写入到文件中。

六、总结

以上就是Java文件读取和写入操作的几种方式。每种方式都适用于不同的场景,我们可以根据实际需要来选择使用哪一种。在使用文件读写时,需要注意及时关闭文件流,避免出现资源泄漏。