在Android中打开资产时出现java.io.FileNotFoundException

时间:2017-04-03 12:58:55

标签: java android

资产文件夹中有50多个PNG。层次结构:src - > main。

        AssetManager assetManager = getApplicationContext().getAssets();
        String[] files = null;
        try {
            files = assetManager.list("imgs");
        } catch (IOException e) {
            Log.e("tag", "Failed to get asset file list.", e);
        }
        if (files != null) for (String filename : files) {
            InputStream in = null;
            OutputStream out = null;
            try {

                        File file = new File(filename);


                in = assetManager.open(file.getPath());

                out = new FileOutputStream(f);
                copyFile(in, out);
            } catch (IOException e) {
                Log.e("tag", "Failed to copy asset file: " + filename, e);
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        // NOOP
                    }
                }
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        // NOOP
                    }
                }
            }
        }

错误:

java.io.FileNotFoundException: 505-tumbleweed-ani.gif
                                                                           at android.content.res.AssetManager.openAsset(Native Method)
                                                                           at android.content.res.AssetManager.open(AssetManager.java:347)
                                                                           at android.content.res.AssetManager.open(AssetManager.java:321)
                                                                           at com.example.android.softkeyboard.ImePreferences.copyAssets(ImePreferences.java:172)
                                                                           at com.example.android.softkeyboard.ImePreferences.onRequestPermissionsResult(ImePreferences.java:107)
                                                                           at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7069)
                                                                           at android.app.Activity.dispatchActivityResult(Activity.java:6921)
                                                                           at android.app.ActivityThread.deliverResults(ActivityThread.java:4049)
                                                                           at android.app.ActivityThread.handleSendResult(ActivityThread.java:4096)
                                                                           at android.app.ActivityThread.-wrap20(ActivityThread.java)
                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1516)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

1 个答案:

答案 0 :(得分:1)

替换下面的行
File file = new File(filename);

以下代码:

您需要在下面的行中添加文件路径

// load image
try {
    // get input stream
    InputStream inputstream= getAssets().open("imgs/"+filename);
    // load image as Drawable
    Drawable drawable = Drawable.createFromStream(inputstream, null);
    // set image to ImageView
    mImage.setImageDrawable(drawable );
}
catch(IOException ex) {
    return;
}