30

重複の可能性:
Android - アセットから特定のファイルの絶対パスを特定する方法は?

ファイルを File(String path) クラスに渡そうとしています。assets フォルダー内のファイルの絶対パスを見つけて File() に渡す方法はありますか。パス文字列として試しfile:///android_asset/myfoldername/myfilenameましたが、うまくいきませんでした。何か案が?

4

2 に答える 2

55

File私の知る限り、アセット ファイルは apk に保存されているため、アセット ファイルから作成することはできません。つまり、アセット フォルダーへのパスがありません。

ただし、FileバッファとAssetManager(アプリケーションの未加工のアセット ファイルへのアクセスを提供します) を使用して作成を試みることができます。

次のようなことをしてみてください:

AssetManager am = getAssets();
InputStream inputStream = am.open("myfoldername/myfilename");
File file = createFileFromInputStream(inputStream);

private File createFileFromInputStream(InputStream inputStream) {

   try{
      File f = new File(my_file_name);
      OutputStream outputStream = new FileOutputStream(f);
      byte buffer[] = new byte[1024];
      int length = 0;

      while((length=inputStream.read(buffer)) > 0) {
        outputStream.write(buffer,0,length);
      }

      outputStream.close();
      inputStream.close();

      return f;
   }catch (IOException e) {
         //Logging exception
   }

   return null;
}

進捗状況をお知らせください。

于 2012-08-05T23:12:02.060 に答える
9

解凍しない限り、アセットは apk 内に残ります。したがって、ファイルにフィードできるパスはありません。質問で指定したパスは、WebView で/で機能しますが、それは WebView の特殊なケースだと思います。

ファイルを解凍するか、直接使用する必要があります。

Context がある場合はcontext.getAssets().open("myfoldername/myfilename");、ファイルで InputStream を開くために使用できます。InputStream を使用すると、直接使用することも、どこかに書き出すこともできます (その後、File で使用できます)。

于 2012-08-05T21:28:06.947 に答える