可能性のある複製:
Android-アセットから特定のファイルの絶対パスを決定する方法?
File(String path)クラスにファイルを渡そうとしています。アセットフォルダーでファイルの絶対パスを見つけてFile()に渡す方法はありますか。私は試した file:///Android_asset/myfoldername/myfilename
をパス文字列として使用しましたが、機能しませんでした。何か案が?
私の知る限り、これらは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;
}
あなたの進歩について教えてください。
展開しない限り、アセットはapk内に残ります。したがって、ファイルにフィードできるパスはありません。質問で指定したパスはWebViewで機能しますが、WebViewの特殊なケースだと思います。
ファイルを解凍するか、直接使用する必要があります。
コンテキストがある場合は、context.getAssets().open("myfoldername/myfilename");
を使用してファイルのInputStreamを開くことができます。 InputStreamを使用すると、直接使用するか、どこかに書き出すことができます(その後、Fileで使用できます)。