web-dev-qa-db-ja.com

アセットフォルダーにあるファイルパスをFile(String path)に渡す方法は?

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

File(String path)クラスにファイルを渡そうとしています。アセットフォルダーでファイルの絶対パスを見つけてFile()に渡す方法はありますか。私は試した file:///Android_asset/myfoldername/myfilenameをパス文字列として使用しましたが、機能しませんでした。何か案が?

30
akd

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

ただし、バッファと 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;
}

あなたの進歩について教えてください。

55
yugidroid

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

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

コンテキストがある場合は、context.getAssets().open("myfoldername/myfilename");を使用してファイルのInputStreamを開くことができます。 InputStreamを使用すると、直接使用するか、どこかに書き出すことができます(その後、Fileで使用できます)。

9
nEx.Software