在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"); Listcontent = 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文件读取和写入操作的几种方式。每种方式都适用于不同的场景,我们可以根据实际需要来选择使用哪一种。在使用文件读写时,需要注意及时关闭文件流,避免出现资源泄漏。