2016-02-11 71 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();