Androidに接続されたUSBフラッシュドライブの大きなファイルにアクセスしています。ファイルが大きいので、私は全体の中でロードするのではなく、ファイルの中で "シーク"する必要があります。Javaランダムアクセスファイル入力ストリーム
C言語では、シークは1行のコードですが、これを達成するにはアンドロイドで叙事詩のコーディングが必要なようです。
インターネットでこのクラスを見たところ、ストリームでシークできますが、コンストラクタに "File Object"を渡す必要があります。
今私はUSBドライブ上のファイルにアクセスする必要があるコードは以下のとおりです。
InputStream in=getContentResolver().openInputStream(uri);
または
ParcelFileDescriptor pfd= getContentResolver().openFileDescriptor(uri,"rw");
しかし、どのように私はからファイルオブジェクトを取得しますContentResolverので、これをRandomAccessFileInputStreamクラスに渡すことができます(上記リンク先)
こんにちは、助けてくれてありがとう、はい私は外付けUSBドライブの固定位置(ルート)にファイルを置くことができます。私があなたを理解しているように、もし私がusb内の固定された場所にファイルを置くと、そのファイル(ex mount pointなど)を見つけて、その場所を取得するために使用するapiと、 – programmer3
@dreadlocks: "はい、外部USBドライブの固定位置(ルート)にファイルを置くことができます" - ファイルシステム経由でUSBドライブのルートに直接アクセスすることはできません。 ** Android **からあなたのアプリにアクセス権があることを示すファイルを置く必要があります。それはデバイスとデバイスのユーザーによって異なる場合があります。そのデバイスとユーザーのために、ドライブを差し込み、 'Context'に' getExternalFilesDirs() 'を呼び出し、そして2番目(以降)の場所を見てその場所を見つけます。これは、アプリが場所に独自のものを書き込んだり、シナリオではなく後で読み込んだりするためのものです。 – CommonsWare