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

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類型等基礎(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);
      }
   }
}

輸出為:

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轉(zhuǎn)換成List,但是要注意這意味著你要將所有的數(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)

@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,同時要注意你的服務器及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ù)讀取為二進制數(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)典管道流的方式

@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();
}

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

相關(guān)文章

  • Java中final,finally,finalize?有什么區(qū)別

    Java中final,finally,finalize?有什么區(qū)別

    這篇文章主要給大家分享的是?Java中final,finally,finalize?到底有什么區(qū)別,文章圍繞final,finally,finalize的相關(guān)資料展開詳細內(nèi)容,具有一定的參考的價值,需要的朋友可以參考一下
    2021-11-11
  • Idea實現(xiàn)接口的方法上無法添加@Override注解的解決方案

    Idea實現(xiàn)接口的方法上無法添加@Override注解的解決方案

    文章介紹了在IDEA中實現(xiàn)接口方法時無法添加@Override注解的問題及其解決方法,主要步驟包括更改項目結(jié)構(gòu)中的Language level到支持該注解的版本,以及在pom.xml文件中指定maven-compiler-plugin的版本以解決自動更新后的問題
    2025-02-02
  • 深入研究spring boot集成kafka之spring-kafka底層原理

    深入研究spring boot集成kafka之spring-kafka底層原理

    這篇文章主要深入研究了spring boot集成kafka如何實現(xiàn)spring-kafka的底層原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • java web實現(xiàn)郵箱激活與忘記密碼

    java web實現(xiàn)郵箱激活與忘記密碼

    這篇文章主要為大家詳細介紹了java web實現(xiàn)郵箱激活與忘記密碼、重置密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Java中BeanUtils.copyProperties基本用法與小坑

    Java中BeanUtils.copyProperties基本用法與小坑

    本文主要介紹了Java中BeanUtils.copyProperties基本用法與小坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • java秒殺系統(tǒng)常見問題庫存超賣解決實例分析

    java秒殺系統(tǒng)常見問題庫存超賣解決實例分析

    這篇文章主要為大家介紹了java秒殺系統(tǒng)常見問題庫存超賣解決實例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • MybatisX中xml映射文件中命名空間爆紅的解決

    MybatisX中xml映射文件中命名空間爆紅的解決

    本文主要介紹了MybatisX中xml映射文件中命名空間爆紅的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Java實現(xiàn)的計算稀疏矩陣余弦相似度示例

    Java實現(xiàn)的計算稀疏矩陣余弦相似度示例

    這篇文章主要介紹了Java實現(xiàn)的計算稀疏矩陣余弦相似度功能,涉及java基于HashMap的數(shù)值計算相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Java程序結(jié)構(gòu)與常量變量難點解析

    Java程序結(jié)構(gòu)與常量變量難點解析

    JAVA的基本結(jié)構(gòu)就是順序結(jié)構(gòu),除非特別指明,否則就按照順序一句一句執(zhí)行順序結(jié)構(gòu)是最簡單的算法結(jié)構(gòu),語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若干個依次執(zhí)行的處理步驟組成的,它是任何一個算法都離不開的一種基本算法結(jié)構(gòu)
    2021-10-10
  • Java集合Set的簡單使用解析

    Java集合Set的簡單使用解析

    這篇文章主要介紹了Java集合Set的簡單使用解析,Set接口是Collection的子接口,Set接口相較于Collection接口沒有提供額外的方法,Set 集合不允許包含相同的元素,如果試把兩個相同的元素加入同一個 Set 集合中,則添加操作失敗,需要的朋友可以參考下
    2023-11-11

最新評論

时尚| 高清| 疏勒县| 芷江| 绥棱县| 江津市| 化州市| 巴塘县| 石河子市| 巴林右旗| 铁岭市| 秦皇岛市| 黄浦区| 和平区| 北川| 安国市| 甘谷县| 普兰县| 汶川县| 仪征市| 大厂| 冕宁县| 达尔| 建湖县| 勐海县| 林口县| 元江| 扎囊县| 天门市| 乐东| 浮梁县| 新泰市| 西乡县| 敦化市| 玉屏| 绥滨县| 宜良县| 桓仁| 澜沧| 迭部县| 宁海县|