-1

SDCARD (外部ストレージ) にあるファイルをシークしたい。
読み取り専用モードで開きました。

in = new RandomAccessFile(filePath, "r");

ファイルをシークするまで、このファイルストリームからの読み取りはすべて問題ありません。

long seekPosition = 100;//sample value
in.seek(seekPosition);

もちろん、シーク位置はファイルサイズよりも大きくなく、負でもありません。ただし、詳細のない例外に直面しています。ここに例外トレースがあります:

java.io.RandomAccessFile.openCheck
(RandomAccessFile.java:258)
の java.io.IOException at java.io.RandomAccessFile.seek(RandomAccessFile.java:648)
...

問題は、なぜこれが起こるのか、どうすれば修正できるのかということです。
共有ストレージにあるファイルのシークに関連していますか、それともこのプロセスで何かを逃しましたか?
私の主な関心事は、ランダム アクセス方式でファイル バイトにアクセスすることです。

4

1 に答える 1

1

(プライベート)RandomAccessFile.openCheck()メソッド(Harvest / Android)は、ファイルが現在開いていることを確認するだけです。がスローされた場合IOException、それはオブジェクトを閉じたことを意味しRandomAccessFileます。

教訓: 予期しない/理解できない例外が発生した場合:

  1. 例外メッセージ1を読みます。
  2. スタック トレースを調べて、例外がスローされた場所を確認します。
  3. ソースコードを見つけます。(Googleは通常私のために働いています...)
  4. ソースコードを見て、なぜスローされるのかを確認してください。

1 - この場合は役に立ちません。なぜなら、何らかの奇妙な理由でIOExceptionメッセージなしでスローするからです。私の意見では、そのバグです。

参照:

于 2013-07-21T03:58:37.107 に答える