web-dev-qa-db-ja.com

androidでテキストファイルを1行ずつ読み取る

こんにちはAndroid=開発について学び始めました。ファイルからテキストを読み取るアプリを構築しようとしています。インターネット全体を検索してきましたが、方法が見つからないようですそうするので、いくつか質問があります。

1.これを行う方法? Androidで行ごとにファイルを読み取るための好ましい方法は何ですか?

2.どこにファイルを保存すればよいですか?それはrawフォルダーにあるべきでしょうか、それともアセットフォルダーにあるべきでしょうか?

これは私がすでに試したものです: "(問題はファイルの検索にあるのではないかと思います。)

@Override   
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.filereader);

    try {
        // open the file for reading
        InputStream fis = new FileInputStream("text.txt");

        // if file the available for reading
        if (fis != null) {

          // prepare the file for reading
          InputStreamReader chapterReader = new InputStreamReader(fis);
          BufferedReader buffreader = new BufferedReader(chapterReader);

          String line;

          // read every line of the file into the line-variable, on line at the time
          do {
             line = buffreader.readLine();
            // do something with the line 
             System.out.println(line);
          } while (line != null);

        }
        } catch (Exception e) {
            // print stack trace.
        } finally {
        // close the file.
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
10
user3668496

そのファイルをどのように処理するかによって異なります。目的がファイルの読み取りだけである場合は、アセットフォルダーが適しています。作業が終わったときにそのファイルに情報を保存する場合は、デバイスに保存する必要があります。

オプション番号2を選択した場合、他のアプリケーションにファイルを読み取らせるかどうかを決定する必要があります。詳細については、次のアドレスをご覧ください。

http://developer.Android.com/training/basics/data-storage/files.html

それ以外の場合は、標準のJavaプロシージャを使用して、説明したとおりに直接デバイスに読み書きできます。ただし、ファイルパスはおそらく

「/sdcard/text.txt」

編集:

これは、始めるためのコードの一部です

FileInputStream is;
BufferedReader reader;
final File file = new File("/sdcard/text.txt");

if (file.exists()) {
    is = new FileInputStream(file);
    reader = new BufferedReader(new InputStreamReader(is));
    String line = reader.readLine();
    while(line != null){
        Log.d("StackOverflow", line);
        line = reader.readLine();
    }
}

ただし、text.txt sdcardのルート。

ファイルがアセットフォルダーにある場合は、次の操作を行う必要があります。

BufferedReader reader;

try{
    final InputStream file = getAssets().open("text.txt");
    reader = new BufferedReader(new InputStreamReader(file));
    String line = reader.readLine();
    while(line != null){
        Log.d("StackOverflow", line);
        line = reader.readLine();
    }
} catch(IOException ioe){
    ioe.printStackTrace();
}
31
TyMarc

コードはよさそうですが、ファイルの読み取りは非同期で行う必要があります。ファイルパスについては、APKにバンドルするファイルか、アプリデータフォルダーにダウンロードするファイルかによって異なります。 Androidのどのバージョンをターゲットにしているのかに応じて、リソースで試してみます...

アセットから読み取るには、アクティビティでこれを行うことができます。

reader = new BufferedReader(
        new InputStreamReader(getAssets().open("filename.txt")));
1
user1568967