Java是一個(gè)非常流行的編程語(yǔ)言,主要應(yīng)用于Web開發(fā)、移動(dòng)應(yīng)用開發(fā)、服務(wù)器端編程等領(lǐng)域。在Java編程中,讀寫文件是一個(gè)常見(jiàn)的操作。Java提供了兩種不同的API來(lái)處理文件讀寫操作,分別是IO和NIO。
在IO中,主要使用InputStream和OutputStream類進(jìn)行讀寫操作。例如,我們可以使用FileInputStream類來(lái)讀取文件。下面是一個(gè)簡(jiǎn)單的代碼示例:
public class ReadFile { public static void main(String[] args) { try { InputStream is = new FileInputStream(new File("test.txt")); int b = 0; while ((b = is.read()) != -1) { System.out.print((char)b); } is.close(); } catch (IOException e) { e.printStackTrace(); } } }
上述代碼中,我們使用InputStream來(lái)讀取文件,并將讀取到的內(nèi)容輸出到控制臺(tái)。同樣,我們可以使用OutputStream來(lái)寫入文件。以下是示例代碼:
public class WriteFile { public static void main(String[] args) { try { OutputStream os = new FileOutputStream(new File("test.txt")); os.write("Hello World!".getBytes()); os.close(); } catch (IOException e) { e.printStackTrace(); } } }
在NIO中,我們使用ByteBuffer和Channel類進(jìn)行讀寫操作。以下是一個(gè)簡(jiǎn)單的NIO讀取文件的代碼示例:
public class ReadFileWithNIO { public static void main(String[] args) { try { RandomAccessFile file = new RandomAccessFile("test.txt", "r"); FileChannel channel = file.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); int bytesRead = channel.read(buffer); while (bytesRead != -1) { buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char)buffer.get()); } buffer.clear(); bytesRead = channel.read(buffer); } file.close(); } catch (IOException e) { e.printStackTrace(); } } }
如上所示,在NIO中,我們首先需要獲取文件的Channel對(duì)象,然后再使用ByteBuffer進(jìn)行讀取。同樣,我們也可以使用Channel和ByteBuffer來(lái)進(jìn)行文件寫入操作。例如,以下是一個(gè)使用NIO寫入文件的代碼示例:
public class WriteFileWithNIO { public static void main(String[] args) { try { RandomAccessFile file = new RandomAccessFile("test.txt", "rw"); FileChannel channel = file.getChannel(); String data = "Hello World!"; byte[] bytes = data.getBytes(); ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.clear(); buffer.put(bytes); buffer.flip(); channel.write(buffer); file.close(); } catch (IOException e) { e.printStackTrace(); } } }
綜上所述,Java IO和NIO都可以用于文件讀寫操作,開發(fā)者可以根據(jù)實(shí)際需求選擇合適的API進(jìn)行編程操作。