这是从文本文件中读取的好方法吗?
Is this a good way of reading from a text file?
我一直在 Internet 上四处寻找,试图找出哪种方法是读取不太长的文本文件的最佳方式(此处的用例涉及小型 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)
好事吗?
我通常就这样滚。 CharBuffer.wrap(text) 似乎只能给你一个字符...... 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();
如果要逐行读取文件:
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 text=new String(Files.readAllBytes(...)) 或 Files.readAllLines(...)
我一直在 Internet 上四处寻找,试图找出哪种方法是读取不太长的文本文件的最佳方式(此处的用例涉及小型 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)
好事吗?
我通常就这样滚。 CharBuffer.wrap(text) 似乎只能给你一个字符...... 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();
如果要逐行读取文件:
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 text=new String(Files.readAllBytes(...)) 或 Files.readAllLines(...)