看板 java 關於我們 聯絡資訊
想請問一下,如果我要讀一個內容大概有10mb的文字檔, 有什麼比較快的方法嗎? 因為我用 newContent=BufferedReader.readline() oldContent+=newContent 這種方式一行一行讀,感覺非常的慢,已經等半小時了還沒跑完 請問有什麼比較聰明且快的方法嗎?謝謝了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.92.204
qrtt1:你有什麼理由需要全部累加!? 05/28 22:39
這個程式是把txt檔先全部讀出來,再根據我設定的符號去做split 存成文字陣列,再把文字陣列寫到excel裡面 所以我把內容全部累加起來.....請問是否有比較好的方法呢? 謝拉 ※ 編輯: sioo 來自: 59.104.92.204 (05/28 22:43)
qrtt1:如果你的split不會跨多行怎麼不單行的做呢? 它會跨多行嗎? 05/28 22:46
sioo:對阿,會跨到多行耶,沒辦法預測會有幾行 05/28 22:47
Jichang:我猜應該是有寫錯.弄成無限回圈.否則 10mb 應該是很快. 05/28 22:57
sioo:資料量比較少時,程式是跑得完的,所以應該不是無窮loop阿 05/28 23:00
MOONRAKER:那表示你程式裡有很多「虛功」。 05/28 23:11
虛功??? 好吧,剛寫了個System.out這東西來看程式跑的狀況, 大概一秒鐘跑10行左右吧,txt檔的資料預估50000行以上, 光是把txt檔讀出來就要可能要跑一個半鐘頭.... 好慢.... ※ 編輯: sioo 來自: 59.104.92.204 (05/28 23:19)
qrtt1:一秒10行太可怕了, 你一行是很長嗎? 貼上你的演算法吧!!! 05/28 23:32
iensue:你的newContent是String嗎? 試試用StringBuilder 05/28 23:50
好像也沒什麼演算法 File file=new File("data.txt"); BufferedReader reader=new BufferedReader(new FileReader(file)); String oldContent=""; String newContent=""; while((newContent=reader.readLine())!=null) { //System.out.println("印出讀到第幾行"); oldContent+=newContent; } 資料的話是長得這樣: http://mis.ccu.edu.tw/~dink/data.txt p.s.不建議用瀏覽器直接開,可能會太大讓瀏覽器呈現當掉的情況,下載下來可能會好一點 ※ 編輯: sioo 來自: 59.104.92.204 (05/29 00:10) ※ 編輯: sioo 來自: 59.104.92.204 (05/29 00:16)
qrtt1:最重要的 split 沒寫, 問題不在讀檔, 根本就不應該這麼做 05/29 00:23
String[] array=oldContent.split("@@@"); //Excel裡面的x,y座標 int x=0,y=1; for(int i=0;i<array.length;i++) { if(array[i].equals("*****")) { //*****表示一筆資料結束,就換行,column從第0個開始 y++; x=0; } else { //將array[i]的內容寫到Excel中的(x,y)中,並換到下一個column sheet.addCell(new Label(x,y,array[i])); x++; } } ※ 編輯: sioo 來自: 59.104.92.204 (05/29 00:29) ※ 編輯: sioo 來自: 59.104.92.204 (05/29 00:35)