在Java開發中,經常需要讀取文件內容,有時候我們需要一次性讀取整個文件,有時候需要按行讀取文件內容,本文將從文件讀取的基本姿勢、流的使用和NIO三個方面詳細介紹如何使用Java獲取文件內容。
一、基本姿勢:File類的使用
Java中File類代表一個文件或者文件夾,提供了一些基本的訪問和操作文件的方法,比如創建、刪除、重命名文件等。
我們可以使用File類的readText()方法來讀取文件的內容:
File file = new File("test.txt");
try(BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
以上代碼會按行讀取文件”test.txt”的內容並輸出到控制台。
如果想一次性讀取整個文件,可以使用以下代碼:
File file = new File("test.txt");
Scanner scanner = new Scanner(file);
String text = scanner.useDelimiter("\\A").next();
System.out.println(text);
scanner.close();
以上代碼將整個文件讀取到了一個String變數中。需要注意的是,Scanner會默認使用空格等作為分隔符,故在此我們使用useDelimiter("\\A")將分隔符置為文件開始處,從而實現一次性讀取文件的目的。
二、流的使用:InputStream和Reader
在Java中,我們可以使用InputStream和Reader來讀取文件內容。其中InputStream是位元組流,支持讀取二進位文件,Reader是字元流,適用於讀取文本文件。
下面的代碼演示了如何使用InputStream讀取文件:
File file = new File("test.txt");
try(InputStream is = new FileInputStream(file)){
byte[] bytes = new byte[(int) file.length()];
is.read(bytes);
String content = new String(bytes, "UTF-8");
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
以上代碼將文件內容讀取到String變數中,需要注意的是,讀取時要指定字元編碼。
下面的代碼演示了如何使用Reader讀取文件:
File file = new File("test.txt");
try (Reader reader = new FileReader(file)){
char[] chars = new char[(int) file.length()];
reader.read(chars);
String content = new String(chars);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
以上代碼與使用InputStream讀取文件的代碼類似,只是使用的是字元流讀取,需要注意的也是字元編碼的問題。
三、NIO:FileChannel的使用
Java NIO是一套用於替代標準IO的API,通過使用Buffer、Channel、Selector等高級概念,NIO可以提高IO操作的效率。
以下代碼演示了如何使用FileChannel讀取文件:
File file = new File("test.txt");
try (FileChannel inChannel = new FileInputStream(file).getChannel()) {
ByteBuffer buffer = ByteBuffer.allocate((int) inChannel.size());
inChannel.read(buffer);
buffer.flip();
Charset charset = Charset.forName("UTF-8");
System.out.println(charset.newDecoder().decode(buffer));
} catch (IOException e) {
e.printStackTrace();
}
代碼中使用FileChannel類來讀取文件,先使用FileInputStream獲取文件輸入流,然後使用getChannel方法獲取FileChannel對象。接著,創建一個ByteBuffer對象來存儲讀取到的文件內容,調用inChannel的read方法將文件內容讀取到ByteBuffer中,最後使用Charset解碼並輸出。
結束語
本文詳細介紹了在Java中如何使用不同的方式讀取文件內容,無論是基本姿勢、流的使用還是NIO,掌握其中一種或多種方式都對Java開發者非常有益。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280540.html
微信掃一掃
支付寶掃一掃