欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java從文件中讀取數(shù)據(jù)的六種方法

 更新時間:2021年11月08日 09:45:58   作者:???YANG  
本文主要介紹了java從文件中讀取數(shù)據(jù)的方法,詳細的介紹了六種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文主要介紹了java從文件中讀取數(shù)據(jù)的六種方法,分享給大家,具體如下:

  • Scanner(Java 1.5) 按行讀數(shù)據(jù)及String、Int類型等按分隔符讀數(shù)據(jù)。
  • Files.lines, 返回Stream(Java 8) 流式數(shù)據(jù)處理,按行讀取
  • Files.readAllLines, 返回List(Java 8)
  • Files.readString, 讀取String(Java 11), 文件最大 2G.
  • Files.readAllBytes, 讀取byte[](Java 7), 文件最大 2G.
  • BufferedReader, 經(jīng)典方式 (Java 1.1 -> forever)

1.Scanner

第一種方式是Scanner,從JDK1.5開始提供的API,特點是可以按行讀取、按分割符去讀取文件數(shù)據(jù),既可以讀取String類型,也可以讀取Int類型、Long類型等基礎數(shù)據(jù)類型的數(shù)據(jù)。

@Test
void testReadFile1() throws IOException {
   //文件內(nèi)容:Hello World|Hello Zimug
   String fileName = "D:\\data\\test\\newFile4.txt";

   try (Scanner sc = new Scanner(new FileReader(fileName))) {
      while (sc.hasNextLine()) {  //按行讀取字符串
         String line = sc.nextLine();
         System.out.println(line);
      }
   }

   try (Scanner sc = new Scanner(new FileReader(fileName))) {
      sc.useDelimiter("\\|");  //分隔符
      while (sc.hasNext()) {   //按分隔符讀取字符串
         String str = sc.next();
         System.out.println(str);
      }
   }

   //sc.hasNextInt() 、hasNextFloat() 、基礎數(shù)據(jù)類型等等等等。
   //文件內(nèi)容:1|2
   fileName = "D:\\data\\test\\newFile5.txt";
   try (Scanner sc = new Scanner(new FileReader(fileName))) {
      sc.useDelimiter("\\|");  //分隔符
      while (sc.hasNextInt()) {   //按分隔符讀取Int
          int intValue = sc.nextInt();
         System.out.println(intValue);
      }
   }
}

輸出為:

Hello World|Hello Zimug
Hello World
Hello Zimug

2.Files.lines (Java 8)

如果你是需要按行去處理數(shù)據(jù)文件的內(nèi)容,這種方式是我推薦大家去使用的一種方式,代碼簡潔,使用java 8的Stream流將文件讀取與文件處理有機融合。

@Test
void testReadFile2() throws IOException {
   String fileName = "D:\\data\\test\\newFile.txt";

   // 讀取文件內(nèi)容到Stream流中,按行讀取
   Stream<String> lines = Files.lines(Paths.get(fileName));

   // 隨機行順序進行數(shù)據(jù)處理
   lines.forEach(ele -> {
      System.out.println(ele);
   });
}

forEach獲取Stream流中的行數(shù)據(jù)不能保證順序,但速度快。如果你想按順序去處理文件中的行數(shù)據(jù),可以使用forEachOrdered,但處理效率會下降。

// 按文件行順序進行處理
lines.forEachOrdered(System.out::println);

也可以把Stream轉換成List,但是要注意這意味著你要將所有的數(shù)據(jù)一次性加載到內(nèi)存,要注意java.lang.OutOfMemoryError

// 轉換成List<String>, 要注java.lang.OutOfMemoryError: Java heap space
List<String> collect = lines.collect(Collectors.toList()

3.Files.readAllLines(java8)

@Test
void testReadFile3() throws IOException {
   String fileName = "D:\\data\\test\\newFile3.txt";

   // 轉換成List<String>, 要注意java.lang.OutOfMemoryError: Java heap space
   List<String> lines = Files.readAllLines(Paths.get(fileName),
               StandardCharsets.UTF_8);
   lines.forEach(System.out::println);

}

4.Files.readString(JDK 11)

從 java11開始,為我們提供了一次性讀取一個文件的方法。文件不能超過2G,同時要注意你的服務器及JVM內(nèi)存。這種方法適合快速讀取小文本文件。

@Test
void testReadFile4() throws IOException {
   String fileName = "D:\\data\\test\\newFile3.txt";

   // java 11 開始提供的方法,讀取文件不能超過2G,與你的內(nèi)存息息相關
   //String s = Files.readString(Paths.get(fileName));
}

5.Files.readAllBytes()

如果你沒有JDK11(readAllBytes()始于JDK7),仍然想一次性的快速讀取一個文件的內(nèi)容轉為String,該怎么辦?先將數(shù)據(jù)讀取為二進制數(shù)組,然后轉換成String內(nèi)容。這種方法適合在沒有JDK11的請開給你下,快速讀取小文本文件。

@Test
void testReadFile5() throws IOException {
   String fileName = "D:\\data\\test\\newFile3.txt";

   //如果是JDK11用上面的方法,如果不是用這個方法也很容易
   byte[] bytes = Files.readAllBytes(Paths.get(fileName));

   String content = new String(bytes, StandardCharsets.UTF_8);
   System.out.println(content);
}

6.經(jīng)典管道流的方式

@Test
void testReadFile6() throws IOException {
   String fileName = "D:\\data\\test\\newFile3.txt";

   // 帶緩沖的流讀取,默認緩沖區(qū)8k
   try (BufferedReader br = new BufferedReader(new FileReader(fileName))){
      String line;
      while ((line = br.readLine()) != null) {
         System.out.println(line);
      }
   }

   //java 8中這樣寫也可以
   try (BufferedReader br = Files.newBufferedReader(Paths.get(fileName))){
      String line;
      while ((line = br.readLine()) != null) {
         System.out.println(line);
      }
   }
}

這種方式可以通過管道流嵌套的方式,組合使用,比較靈活。比如我們 想從文件中讀取java Object就可以使用下面的代碼,前提是文件中的數(shù)據(jù)是ObjectOutputStream寫入的數(shù)據(jù),才可以用ObjectInputStream來讀取。

try (FileInputStream fis = new FileInputStream(fileName);
     ObjectInputStream ois = new ObjectInputStream(fis)){
   ois.readObject();
}

到此這篇關于java從文件中讀取數(shù)據(jù)的六種方法的文章就介紹到這了,更多相關java從文件中讀取數(shù)據(jù)的六種方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • SpringBoot詳解如何實現(xiàn)讀寫分離

    SpringBoot詳解如何實現(xiàn)讀寫分離

    當響應的瓶頸在數(shù)據(jù)庫的時候,就要考慮數(shù)據(jù)庫的讀寫分離,當然還可以分庫分表,那是單表數(shù)據(jù)量特別大,當單表數(shù)據(jù)量不是特別大,但是請求量比較大的時候,就要考慮讀寫分離了.具體的話,還是要看自己的業(yè)務...如果還是很慢,那就要分庫分表了...我們這篇就簡單講一下讀寫分離
    2022-05-05
  • Spring 父類變量注入失敗的解決

    Spring 父類變量注入失敗的解決

    這篇文章主要介紹了Spring 父類變量注入失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 一文掌握Spring中循環(huán)依賴與三級緩存

    一文掌握Spring中循環(huán)依賴與三級緩存

    這篇文章主要介紹了Spring中循環(huán)依賴與三級緩存,Spring通過三級緩存解決了循環(huán)依賴,其中一級緩存為單例池,二級緩存為早期曝光對象earlySingletonObjects,三級緩存為早期曝光對象工廠(singletonFactories),本文結合實例代碼介紹的非常詳細,需要的朋友參考下吧
    2023-09-09
  • IntelliJ IDEA窗口組件具體操作方法

    IntelliJ IDEA窗口組件具體操作方法

    IDEA剛接觸不久,各種常用工具窗口找不到,不小心關掉不知道從哪里打開,今天小編給大家分享這個問題的解決方法,感興趣的朋友一起看看吧
    2021-09-09
  • Ribbon的饑餓加載(eager-load)模式解讀

    Ribbon的饑餓加載(eager-load)模式解讀

    這篇文章主要介紹了Ribbon的饑餓加載(eager-load)模式解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Springboot項目平滑關閉及自動化關閉腳本

    Springboot項目平滑關閉及自動化關閉腳本

    這篇文章主要為大家詳細介紹了Springboot項目平滑關閉及自動化關閉腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • springboot上傳文件并返回url過程

    springboot上傳文件并返回url過程

    這篇文章主要介紹了springboot上傳文件并返回url過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SSH框架網(wǎng)上商城項目第12戰(zhàn)之添加和更新商品功能

    SSH框架網(wǎng)上商城項目第12戰(zhàn)之添加和更新商品功能

    這篇文章主要介紹了SSH框架網(wǎng)上商城項目第12戰(zhàn)之添加和更新商品功能的實現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Spring Cloud服務安全連接方式

    Spring Cloud服務安全連接方式

    這篇文章主要介紹了Spring Cloud服務安全連接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解Spring Cloud Zuul網(wǎng)關修改為短連接方法

    詳解Spring Cloud Zuul網(wǎng)關修改為短連接方法

    本文主要介紹了詳解Spring Cloud Zuul網(wǎng)關修改為短連接方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04

最新評論