在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-hant/n/280540.html