0

ファイルが別の時間に開かれるまで、いくつかのデータを読み取る必要がありますが、まだ読み取られていないデータへのポインターが自動的に増加するかどうかはわかりませんか?

私の方法:

//method for copy binary data from file to binaryDataBuffer
    void readcpy(String fileName, int pos, int len) {       
        try {                                              
            File lxDirectory = new File(Environment.getExternalStorageDirectory().getPath() + "/DATA/EXAMPLE/");

            File lxFile = new File(lxDirectory, (fileName);

            FileInputStream mFileInputStream = new FileInputStream(lxFile);

            mFileInputStream.read(binaryDataBuffer, pos, len);
         }  
        catch (Exception e) {
            Log.d("Exception", e.getMessage());             
        }
    }  

したがって、このメソッドを初めて呼び出して、たとえば 5 バイトを読み取って保存すると、メソッドの次の呼び出しで 5 番目のバイトからバイトが読み取られますか? 読んだ後にファイルを閉じません。

4

3 に答える 3

1

を作成するとInputStream(aFileInputStreamは であるためInputStream)、ストリームは毎回新たに作成され、ストリーム (したがってファイル) の先頭から開始されます。

前回中断したところから読み取りたい場合は、オフセットとシークを保持するか、開いた最初の入力ストリームを保持する必要があります。

ストリームを ( を使用して.skip()) シークすることはできますが、いずれにせよ、毎回再オープンすることはお勧めできません。コストがかかります。また、ストリームを使い終わったら、それを閉じる必要があります。

// with Java 7: in automatically closed
try (InputStream in = ...;) {
    // do stuff
} catch (WhateverException e) {
    // handle exception
}

// with Java 6
InputStream in = ...;
try {
    // do stuff
} catch (WhateverException e) {
    // handle exception
} finally {
    in.close();
}
于 2013-06-17T05:29:14.760 に答える
0

このコードを試してください:

public String getStringFromFile (String filePath) throws Exception {    
    File fl = new File(filePath);
    FileInputStream fin = new FileInputStream(fl);
    BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
    StringBuilder sb = new StringBuilder();

    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line).append("\n");
    }
    String ret = sb.toString();

    //Make sure you close all streams.
    fin.close();  
    reader.close();

    return ret;
}
于 2013-06-17T08:25:44.523 に答える