我有一个文本文件,我想将它的全部内容读入一个String变量。 该文件正在作为InputStream打开,因为我正在使用Android的assetManager.open()
方法。
将整个内容读入String的最佳实践方法是什么?我目前正在使用InputStreamReader和BufferedReader包装InputStream,并使用while循环,我在文本中逐行读取readLine()方法。
在本文中是否有更好的阅读方式,因为我没有要求逐行阅读,我想尽可能一次性完成阅读
答案 0 :(得分:5)
这是Java 7 Files.readAllLines
method的作用 - 我希望它是一种非常好的方法(它使用try-with-resources语法,可以很容易地转换为在android上工作):
public static List<String> readAllLines(Path path, Charset cs) throws IOException {
try (BufferedReader reader = newBufferedReader(path, cs)) {
List<String> result = new ArrayList<String>();
for (;;) {
String line = reader.readLine();
if (line == null)
break;
result.add(line);
}
return result;
}
}
在您的情况下,您可以将字符串附加到StringBuilder,而不是将它们添加到列表中。
答案 1 :(得分:2)
通常不应该重新发明轮子,所以使用apache commons库,如果在Android上可以承受开销。 使用org.apache.commons.io.IOUtils.toString。
InputStream in = new FileInputStream(new File("a.txt"));
String s = IOUtils.toString(in, "UTF-8");
答案 2 :(得分:0)
这是另一种可行的方法。
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
char[] cbuf = new char[500];
br.read(cbuf);
String fileContents = new String(cbuf);
答案 3 :(得分:0)
Scanner scanner = new Scanner(file, encoding);
scanner.useDelimiter("\\A");
if (!scanner.hasNext()) { // corner case -- file is empty
return "";
}
String result = scanner.next();
scanner.close();
答案 4 :(得分:-1)
您也可以使用Scanner类
Scanner scan = new Scanner(file);
String content = scan.next();