5

テキスト ファイルがあり、その内容全体を文字列変数に読み込みたいと考えています。Androidのメソッドを使用しているため、ファイルはInputStreamとして開かれています。assetManager.open()

コンテンツ全体を文字列に読み込むベストプラクティスの方法は何ですか? 現在、InputStream を InputStreamReader でラップし、次に BufferedReader でラップし、while ループを使用して、readLine() メソッドでテキストを 1 行ずつ読み込んでいます。

行ごとに読む必要がないことを考えると、このテキストを読むためのより良い方法はありますか? 可能であればすべてを一度に取得したいです

4

5 に答える 5

5

これはJava 7Files.readAllLinesメソッドが行うことです-私はそれを行うための非常に良い方法であると期待しています(Androidで動作するように簡単に転置可能なtry-with-resources構文を使用します):

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 に答える