在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文件讀取和寫入操作的幾種方式。每種方式都適用於不同的場景,我們可以根據實際需要來選擇使用哪一種。在使用文件讀寫時,需要注意及時關閉文件流,避免出現資源泄漏。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/197332.html