我有一个文本文件,我想将它的全部内容读入一个字符串变量。当我使用 Android 的方法时,该文件正在作为 InputStream 打开。assetManager.open()
将全部内容读入字符串的最佳实践方法是什么?我目前正在用 InputStreamReader 和 BufferedReader 包装 InputStream,并使用我使用 readLine() 方法逐行读取文本的 while 循环。
考虑到我不需要逐行阅读,是否有更好的阅读方式,如果可能的话,我想一口气读完
我有一个文本文件,我想将它的全部内容读入一个字符串变量。当我使用 Android 的方法时,该文件正在作为 InputStream 打开。assetManager.open()
将全部内容读入字符串的最佳实践方法是什么?我目前正在用 InputStreamReader 和 BufferedReader 包装 InputStream,并使用我使用 readLine() 方法逐行读取文本的 while 循环。
考虑到我不需要逐行阅读,是否有更好的阅读方式,如果可能的话,我想一口气读完
这就是Java 7Files.readAllLines
方法的作用——我希望它是一种非常好的方法(它使用 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 而不是将它们添加到列表中。
通常不应该重新发明轮子,所以如果开销在 Android 上是可以承受的,请使用 apache commons 库。使用org.apache.commons.io.IOUtils.toString。
InputStream in = new FileInputStream(new File("a.txt"));
String s = IOUtils.toString(in, "UTF-8");
这是另一种可能的方式。
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
char[] cbuf = new char[500];
br.read(cbuf);
String fileContents = new String(cbuf);
Scanner scanner = new Scanner(file, encoding);
scanner.useDelimiter("\\A");
if (!scanner.hasNext()) { // corner case -- file is empty
return "";
}
String result = scanner.next();
scanner.close();
您还可以使用 Scanner 类
Scanner scan = new Scanner(file);
String content = scan.next();