最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java?io文件操作從文件讀取數(shù)據(jù)的六種方法

 更新時間:2022年03月16日 15:53:38   作者:字母哥哥  
這篇文章主要為大家介紹了java?io操作總結(jié)從文件讀取數(shù)據(jù)的六種方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

在上一篇文章中,我為大家介紹了《5種創(chuàng)建文件并寫入文件數(shù)據(jù)的方法》,本節(jié)我們?yōu)榇蠹襾斫榻B6種從文件中讀取數(shù)據(jù)的方法.

另外為了方便大家理解,我為這一篇文章錄制了對應(yīng)的視頻:總結(jié)java從文件中讀取數(shù)據(jù)的6種方法-JAVA IO基礎(chǔ)總結(jié)第二篇

Scanner(Java 1.5) 按行讀數(shù)據(jù)及String、Int類型等按分隔符讀數(shù)據(jù)。

Files.lines, 返回Stream(Java 8) 流式數(shù)據(jù)處理,按行讀取

Files.readAllLines, 返回List<String>(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類型等基礎(chǔ)數(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() 、基礎(chǔ)數(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);
      }
   }
}

上面的方法輸出結(jié)果如下:

Hello World|Hello Zimug
Hello World
Hello Zimug
1
2

2.Files.lines (Java 8)

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

@Test
void testReadFile2() throws IOException {
   String fileName = "D:\\data\\test\\newFile.txt";
   // 讀取文件內(nèi)容到Stream流中,按行讀取
   Stream<String> lines = Files.lines(Paths.get(fileName));
   // 隨機(jī)行順序進(jìn)行數(shù)據(jù)處理
   lines.forEach(ele -> {
      System.out.println(ele);
   });
}

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

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

或者利用CPU多和的能力,進(jìn)行數(shù)據(jù)的并行處理parallel(),適合比較大的文件。

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

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

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

3.Files.readAllLines

這種方法仍然是java8 為我們提供的,如果我們不需要Stream<String>,我們想直接按行讀取文件獲取到一個List<String>,就采用下面的方法。同樣的問題:這意味著你要將所有的數(shù)據(jù)一次性加載到內(nèi)存,要注意java.lang.OutOfMemoryError

@Test
void testReadFile3() throws IOException {
   String fileName = "D:\\data\\test\\newFile3.txt";
   // 轉(zhuǎn)換成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,同時要注意你的服務(wù)器及JVM內(nèi)存。這種方法適合快速讀取小文本文件。

@Test
void testReadFile4() throws IOException {
   String fileName = "D:\\data\\test\\newFile3.txt";
   // java 11 開始提供的方法,讀取文件不能超過2G,與你的內(nèi)存息息相關(guān)
   //String s = Files.readString(Paths.get(fileName));
}

5.Files.readAllBytes()

如果你沒有JDK11(readAllBytes()始于JDK7),仍然想一次性的快速讀取一個文件的內(nèi)容轉(zhuǎn)為String,該怎么辦?先將數(shù)據(jù)讀取為二進(jìn)制數(shù)組,然后轉(zhuǎn)換成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)典管道流的方式

最后一種就是經(jīng)典的管道流的方式

@Test
void testReadFile6() throws IOException {
   String fileName = "D:\\data\\test\\newFile3.txt";
   // 帶緩沖的流讀取,默認(rèn)緩沖區(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 io操作總結(jié)從文件讀取數(shù)據(jù)的六種方法的詳細(xì)內(nèi)容,更多關(guān)于java io從文件讀取數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Invalid bound statement(not found):錯誤的解決方案

    Invalid bound statement(not found):錯誤的解決方案

    本文介紹了在開發(fā)Java SpringBoot應(yīng)用程序時出現(xiàn)的"Invalidboundstatement(notfound)"錯誤的原因及解決方法,該錯誤通常與MyBatis或其他持久化框架相關(guān),可能是由于配置錯誤、拼寫錯誤或其他問題引起的,解決方法包括檢查SQL映射文件
    2025-01-01
  • java中main函數(shù)你知道多少

    java中main函數(shù)你知道多少

    大家好,本篇文章主要講的是java中main函數(shù)你知道多少,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java基于BIO實現(xiàn)文件上傳功能

    Java基于BIO實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了Java基于BIO實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • spring validation多層對象校驗教程

    spring validation多層對象校驗教程

    這篇文章主要介紹了spring validation多層對象校驗教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java和jsp之間的request傳值方法

    java和jsp之間的request傳值方法

    這篇文章主要給大家介紹了關(guān)于java和jsp之間的request傳值方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 淺談選擇、冒泡排序,二分查找法以及一些for循環(huán)的靈活運(yùn)用

    淺談選擇、冒泡排序,二分查找法以及一些for循環(huán)的靈活運(yùn)用

    下面小編就為大家?guī)硪黄獪\談選擇、冒泡排序,二分查找法以及一些for循環(huán)的靈活運(yùn)用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • SpringBoot integration實現(xiàn)分布式鎖的示例詳解

    SpringBoot integration實現(xiàn)分布式鎖的示例詳解

    常規(guī)項目都是采用Redission來實現(xiàn)分布式鎖,進(jìn)行分布式系統(tǒng)中資源競爭加鎖操作,偶然發(fā)現(xiàn)SpringBoot中的integration也實現(xiàn)多種載體的分布式鎖控制,下面我們就來看看具體實現(xiàn)方法吧
    2023-12-12
  • SpringBoot使用validation做參數(shù)校驗的實現(xiàn)步驟

    SpringBoot使用validation做參數(shù)校驗的實現(xiàn)步驟

    這篇文章主要介紹了SpringBoot使用validation做參數(shù)校驗的實現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下
    2021-05-05
  • 淺談Java成員變量與屬性的區(qū)別(簡單最易懂的解釋)

    淺談Java成員變量與屬性的區(qū)別(簡單最易懂的解釋)

    下面小編就為大家?guī)硪黄獪\談Java成員變量與屬性的區(qū)別(簡單最易懂的解釋)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • spring使用ehcache實現(xiàn)頁面緩存示例

    spring使用ehcache實現(xiàn)頁面緩存示例

    這篇文章主要介紹了spring使用ehcache實現(xiàn)頁面緩存示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論

屯留县| 同心县| 桦南县| 绥棱县| 陇西县| 溆浦县| 浮山县| 确山县| 民勤县| 招远市| 濮阳市| 安国市| 确山县| 凤冈县| 房产| 通许县| 泸定县| 正蓝旗| 洛扎县| 林口县| 商城县| 平乐县| 苗栗市| 河津市| 连城县| 海口市| 天门市| 麻城市| 新兴县| 建水县| 延庆县| 轮台县| 哈巴河县| 朝阳市| 灯塔市| 饶阳县| 通河县| 瑞昌市| 沛县| 西宁市| 常宁市|