什么是一次性从文本文件中读取所有数据的最合适方法?

时间:2012-12-31 13:52:58

标签: java android inputstream

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

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

在本文中是否有更好的阅读方式,因为我没有要求逐行阅读,我想尽可能一次性完成阅读

5 个答案:

答案 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();