【问题标题】:Code for moving files doesn't work移动文件的代码不起作用
【发布时间】:2018-07-21 18:23:49
【问题描述】:

在我的 android 项目中,我想移动一个文件,但它崩溃了。 我使用了以下代码:

copyFile(getResources().openRawResource(R.raw.world_resource_packs), "/storage/emulated/0/games/com.mojang/minecraftWorlds/Escape The Room (Original by Twister Games)/world_resource_packs.json");

public void copyFile(InputStream inputStream, String outputPath){

    System.out.println("1");
    in = inputStream;
    out = null;
    System.out.println("2");
    try {
        out = new FileOutputStream(outputPath);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    System.out.println("3");
    byte[] buff = new byte[1024];
    int read = 0;
    System.out.println("4");

    try {
        while ((read = in.read(buff)) > 0) {
            out.write(buff, 0, read);
        }
        System.out.println("5");
        System.out.println("6");
        System.out.println("7");
        System.out.println("8");
        System.out.println("9");
        System.out.println("10");
    } catch (IOException e) {
        e.printStackTrace();
    }

}

我也把它放在我的清单中:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

但它仍然崩溃:

E/AndroidRuntime:致命异常:主进程:twistergames.de.testverschieben,PID:11228 java.lang.RuntimeException:无法启动活动 ComponentInfo{twistergames.de.testverschieben/twistergames.de.testverschieben.MainActivity}:java .lang.NullPointerException:尝试在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2793) 的空对象引用上调用虚拟方法 'void java.io.FileOutputStream.write(byte[], int, int)' android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 在 android.os。 Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:156) 在 android.app.ActivityThread.main(ActivityThread.java:6523) 在 java.lang.reflect.Method.invoke (本机方法)在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 在 com.android.internal.os.Zygo teInit.main(ZygoteInit.java:832) 原因:java.lang.NullPointerException:尝试在twistergames的空对象引用上调用虚拟方法'void java.io.FileOutputStream.write(byte [],int,int)' .de.testverschieben.MainActivity.copyFile(MainActivity.java:44) 在twistergames.de.testverschieben.MainActivity.onCreate(MainActivity.java:23) 在android.app.Activity.performCreate(Activity.java:6915) 在android。 app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) 在 android.app.ActivityThread.-在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java) 的 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 的 wrap12(ActivityThread.java) :156) 在 android.app.ActivityThread.main(ActivityThread.java:6523) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.and com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 上的 roid.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)

非常感谢!!!

【问题讨论】:

  • 你能告诉我们android终结器中的错误还是你得到的错误?
  • 请提供您收到的错误信息。
  • 但这只是棉花糖,不是吗?
  • 棉花糖及以上。

标签: android file move


【解决方案1】:

这是实际的错误描述:

java.lang.NullPointerException:尝试在

的空对象引用上调用虚拟方法 'void java.io.FileOutputStream.write(byte[], int, int)'

所以你在尝试打开输出流时遇到了 IOException

try {
        out = new FileOutputStream(outputPath);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

所以在指定的路径上没有文件。

另外我建议不要忽略 FileNotFoundException 并退出方法或重新抛出 RuntimeException。

确保路径为“/storage/emulated/0/games/com.mojang/minecraftWorlds/Escape The Room (Original by Twister Games)/world_resource_packs.json”的文件存在并在需要时创建它

【讨论】:

    【解决方案2】:

    如果您运行的是 Android 6.0+,请转到设置 -> 应用程序 -> 您的应用程序 -> 权限并在此处授予权限。这是用于测试的临时修复。从长远来看,您应该请求运行时权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 2019-06-26
      • 1970-01-01
      • 2019-03-12
      • 2016-03-18
      相关资源
      最近更新 更多