Android: как мне создать объект File из файла файла? - программирование
Подтвердить что ты не робот

Android: как мне создать объект 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");

Я признаю, что я не полностью понимаю вышеупомянутый механизм, поэтому возможно, что то, что я пытаюсь сделать, не может работать.

спасибо!

4b9b3361

Ответ 1

Вы не можете получить объект File непосредственно из актива, потому что актив не сохраняется как файл. Вам нужно будет скопировать ресурс в файл, а затем получить объект File на вашей копии.

Ответ 2

Вы не можете получить объект 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();
        }
    }
}

Ответ 3

Эта функция отсутствует в коде. @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/...