簡體   English   中英

使用BufferedReader從文件讀取一組行

[英]Read a set of lines from a file using BufferedReader

嗨,我有一個大約1.6 GB的大型csv文件,我正在嘗試讀取該文件並創建這些行的json數組,並將其發送給其他消耗品流程。

我有以下代碼

while(consumeover){
    try (BufferedReader br = new BufferedReader(new FileReader
                                ("/my/path/largefile"),65536)) {
         for (String line; (line = br.readLine()) != null;) {
         String[] dataRow = line.split("\\|");
         //create json array
         //add each dataRow element to array  
         }
    }
   }

現在發生的是上面的代碼讀取整個文件並創建json數組,該數組拋出內存不足錯誤。 我想每次我創建json數組時都要讀取1000行。 如何將上次讀取位置設置為i + 1000? 由於文件非常大,由於創建了數據數組,Java耗盡了內存。

請提前指導謝謝。

簡單的解決方案是在獲取時輸出每行(而不是將其保存在數組中,然后發送/寫入),或者在獲取時每輸出1000行。 這樣,您只需要一次性讀取文件。 您在內存中保留的行越少,您使用的內存就越少。

注意:從N行讀取數據的唯一方法是讀取N行並忽略它們。 隨着文件變大,這將變得越來越昂貴。

假設您有一種將CSV線轉換為JSon的方法。

try(BufferedReader br = new BufferedReader(new FileReader(infile));
    PrintWriter bw = new PrintWriter(new FileWriter(outfile))) {
    for(String line; (line = br.readLine()) != null;) {
        String json = process(line);
        bw.println(json);
    }
}

不管文件有多大,這僅需要足夠的內存來存儲一行CSV和一行JSON。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM