Ответ 1
Вы не можете получить объект File
непосредственно из актива, потому что актив не сохраняется как файл. Вам нужно будет скопировать ресурс в файл, а затем получить объект File
на вашей копии.
У меня есть текстовый файл в папке с ресурсами, который мне нужно превратить в объект File (а не в InputStream). Когда я попробовал это, у меня возникло исключение "нет такого файла":
String path = "file:///android_asset/datafile.txt";
URL url = new URL(path);
File file = new File(url.toURI()); // Get exception here
Могу ли я изменить это, чтобы заставить его работать?
Кстати, я вроде как пытался "закодировать пример", глядя на следующий фрагмент кода в другом месте моего проекта, который ссылается на файл HTML в папке с ресурсами
public static Dialog doDialog(final Context context) {
WebView wv = new WebView(context);
wv.loadUrl("file:///android_asset/help/index.html");
Я признаю, что я не полностью понимаю вышеупомянутый механизм, поэтому возможно, что то, что я пытаюсь сделать, не может работать.
спасибо!
Вы не можете получить объект File
непосредственно из актива, потому что актив не сохраняется как файл. Вам нужно будет скопировать ресурс в файл, а затем получить объект File
на вашей копии.
Вы не можете получить объект File непосредственно из актива.
Сначала получите входной поток из вашего актива, используя, например, AssetManager # open
Затем скопируйте inputStream:
public static void writeBytesToFile(InputStream is, File file) throws IOException{
FileOutputStream fos = null;
try {
byte[] data = new byte[2048];
int nbread = 0;
fos = new FileOutputStream(file);
while((nbread=is.read(data))>-1){
fos.write(data,0,nbread);
}
}
catch (Exception ex) {
logger.error("Exception",ex);
}
finally{
if (fos!=null){
fos.close();
}
}
}
Эта функция отсутствует в коде. @wadali
private void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
Источник: fooobar.com/info/31303/...