2016-02-11 62 views
0

我一直在互聯網上四處尋找,試圖找出哪些可能是從不太長的文本文件(這裏的用例涉及小型OpenGL着色器)中讀取的最佳方式。我結束了這個:這是從文本文件中讀取的好方法嗎?

private static String load(final String path) 
{ 
    String text = null; 

    try 
    { 
     final FileReader fileReader = new FileReader(path); 
     fileReader.read(CharBuffer.wrap(text)); 

     // ... 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

    return text; 
} 

在這種情況下,這段代碼會導致效率低下?那CharBuffer.wrap(text)是件好事嗎?

+0

你有沒有測試這種方法嗎?它是否返回文本? 'CharBuffer.wrap(text)'返回一個只讀緩衝區。 – RealSkeptic

回答

1

如果你想逐行讀取文件一行:如果你想讀

BufferedReader br = new BufferedReader(new FileReader(path)); 
try { 
    StringBuilder sb = new StringBuilder(); 
    String line = br.readLine(); 

    while (line != null) { 
     sb.append(line); 
     sb.append(System.lineSeparator()); 
     line = br.readLine(); 
    } 
    String everything = sb.toString(); 
} finally { 
    br.close(); 
} 

一氣呵成的完整文件:

字符串文本=新的String(Files.readAllBytes(...))或Files.readAllLines(...)

+0

你提到的最後一種方法在處理小文件時的效率如何(例如少於50行,每行少於50個字符)?我知道這是一個非常廣泛的問題,但我仍然對答案感興趣。 – pr0gma

+1

http://ideone.com/JD5FS6使用的BufferedReader 1周 使用readallBytes 11 其實是BufferedReader中約10倍ReadAllBytes對於你提到一個文件更高效的讀取所需的時間讀取 時間。爲此使用BufferedReader。 –

+0

不錯,非常感謝。 – pr0gma

1

我通常會像這樣滾動。該CharBuffer.wrap(文字)的東西似乎只讓你一個字符... File Reader docs

BufferedReader br = new BufferedReader(fr); 
StringBuilder sb = new StringBuilder(); 
String s; 
while((s = br.readLine()) != null) { 
    sb.append(s); 
} 
fr.close(); 
return sb.toString(); 
相關問題