23

アセットフォルダに、(InputStreamではなく)Fileオブジェクトに変換する必要のあるテキストファイルがあります。これを試したところ、「そのようなファイルはありません」という例外が発生しました。

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");

私は上記のメカニズムを完全には理解していないことを認めます。そのため、私がやろうとしていることがうまくいかない可能性があります。

どうも!

4

3 に答える 3

29

Fileアセットはファイルとして保存されていないため、アセットから直接オブジェクトを取得することはできません。Fileアセットをファイルにコピーしてから、コピーにオブジェクトを取得する必要があります。

于 2012-05-01T19:00:49.827 に答える
12

アセットから直接Fileオブジェクトを取得することはできません。

まず、 AssetManager#openなどを使用してアセットからinputStreamを取得します

次に、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();
        }
    }
}
于 2014-02-12T14:05:22.733 に答える
-1

この関数はコードにありません。@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);
    }
}

ソース:https ://stackoverflow.com/a/4530294/4933464

于 2016-11-06T17:00:24.150 に答える