2017-05-15 14 views
0

電話機の内部ストレージにある既存のファイル(パスは/system/data/recf/pic.jpg)に対して、openInputStream()メソッドを使用してinputStreamを構築すると、FileNotFoundExceptionがスローされます。ContentResolver.openInputStream(Uri)を使用してファイルを読み取ることができません

これは私が

ContentResolver cr = context.getContentResolver(); 
InputStream inputStream = null; 
Uri filename = Uri.parse("file:///system/data/recf/pic.jpg"); 
inputStream = cr.openInputStream(filename); 

doing-だものです。しかし、それはしてFileNotFoundExceptionを投げています。ファイルが存在することを確認しました。長い間立ち往生してください、助けてください。ありがとう。

+0

あなたはどのOSバージョンでテストしていますか? FileProviderドキュメント – Raghunandan

+0

のOSバージョンがAndroid 6.0.1であることを確認してください。 これは次のエラーメッセージです。 java.io.FileNotFoundException:/system/data/recf/pic.jpg:オープンに失敗しました:ENOENT(そのようなファイルまたはディレクトリはありません) – kshubham07

+0

https://developer.android.com/リファレンス/アンドロイド/サポート/ v4 /コンテンツ/ FileProvider.html。 – Raghunandan

答えて

0

デバイスの内部ストレージ(携帯電話のストレージ)は、引き続きAndroidの外付けストレージと見なされます。 「外部記憶装置」は、SDカードまたは携帯電話の取り外し不能な内部記憶装置などのリムーバブル記憶装置を指してもよい。

「内部ストレージ」は、ユーザーを含めて誰とも共有されていない、あなたのアプリのプライベートスペースを指します。

したがって、外部ストレージとの読み書きの許可が必要でした。 Android M +では、リアルタイムの許可が必要でした。

0

私はあなたがパス

Uri filename = Uri.parse("file:///system/data/recf/pic.jpg"); 

のためにハードコードされた文字列を解析していて、トリプル前方slasheでファイルを渡している見ることができます。これは問題かもしれません。 まず、パスが正しいことを確認する必要があります。あなたは実際にそこに提供されたパスを持つファイルがあることを確認するためにファイルオブジェクトを使用することができます。チェックのために以下のコードを使用することができます。

File file = new File("Your path"); 
if(file.exists()) { 
    // if this is true that means file exists in actual then 
    //make uri and get the stream as you are already doing 
} 

ほとんどの場合、この問題はパスに属しています。私の答えがあなたに役立つことを願っています

関連する問題