5

我有一个文本文件,我想将它的全部内容读入一个字符串变量。当我使用 Android 的方法时,该文件正在作为 InputStream 打开。assetManager.open()

将全部内容读入字符串的最佳实践方法是什么?我目前正在用 InputStreamReader 和 BufferedReader 包装 InputStream,并使用我使用 readLine() 方法逐行读取文本的 while 循环。

考虑到我不需要逐行阅读,是否有更好的阅读方式,如果可能的话,我想一口气读完

4

5 回答 5

5

这就是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 而不是将它们添加到列表中。

于 2012-12-31T13:54:35.607 回答
2

通常不应该重新发明轮子,所以如果开销在 Android 上是可以承受的,请使用 apache commons 库。使用org.apache.commons.io.IOUtils.toString

InputStream in = new FileInputStream(new File("a.txt"));
String s = IOUtils.toString(in, "UTF-8");
于 2012-12-31T15:10:40.887 回答
0

这是另一种可能的方式。

BufferedReader br = new BufferedReader(new FileReader("a.txt"));
char[] cbuf = new char[500];
br.read(cbuf);
String fileContents = new String(cbuf);
于 2012-12-31T14:44:43.167 回答
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();
于 2012-12-31T14:54:10.203 回答
-1

您还可以使用 Scanner 类

Scanner scan = new Scanner(file);  
String content = scan.next(); 
于 2012-12-31T13:57:30.537 回答