10

アプリケーションを Symbian/iPhone から Android に移植しています。その一部は、一部のデータをファイルに保存しています。FileOutputStreamを使用して、ファイルをプライベート フォルダー/data/data/package_name/filesに保存しました。

FileOutputStream fos = iContext.openFileOutput( IDS_LIST_FILE_NAME, Context.MODE_PRIVATE ); 
fos.write( data.getBytes() ); 
fos.close();

今、それらをロードする方法を探しています。私はFileInputStreamを使用していますが、ファイルをバイトごとに読み取ることができますが、これはかなり非効率的です。

int ch;
StringBuffer fileContent = new StringBuffer("");
FileInputStream fis = iContext.openFileInput( IDS_LIST_FILE_NAME );
while( (ch = fis.read()) != -1)
  fileContent.append((char)ch);
String data = new String(fileContent);

だから私の質問は、より良い方法でファイルを読む方法ですか?

4

4 に答える 4

12

FileInputStream.read(byte[])を使用すると、より効率的に読み取ることができます。

一般に、任意のサイズのファイルをメモリに読み込むことは望ましくありません。

ほとんどのパーサーはInputStream. ファイルをどのように使用しているかをお知らせいただければ、より適切なファイルを提案できるかもしれません。

のバイト バッファ バージョンを使用する方法は次のread()とおりです。

byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
    fileContent.append(new String(buffer));
}
于 2011-03-06T10:06:20.200 に答える
8

これは実際には Android 固有ではなく、より Java 指向です。

代わりに行単位の読み取りを好む場合は、FileInputStream を InputStreamReader でラップしてから、BufferedReader に渡すことができます。BufferedReader インスタンスには、行ごとに読み取るために使用できる readLine() メソッドがあります。

InputStreamReader in = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(in);
String data = br.readLine()

または、Google Guava ライブラリを使用する場合は、 ByteStreamsで便利な関数を使用できます。

String data = new String(ByteStreams.toByteArray(fis));
于 2011-03-06T10:12:14.303 に答える
1

//書き込む

String data = "Hello World";
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(FILENAME,     
Context.MODE_PRIVATE));
outputStreamWriter.write(data);
outputStreamWriter.close();

//読む

String ret = "";

    try {
        InputStream inputStream = openFileInput(FILENAME);

        if ( inputStream != null ) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (receiveString = bufferedReader.readLine()) != null ) {
                stringBuilder.append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    }
    catch (FileNotFoundException e) {
        Log.e(TAG, "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e(TAG, "Can not read file: " + e.toString());
    }

    return ret;
}
于 2014-09-23T04:57:45.527 に答える