用于移动文件的代码不起作用

时间:2018-07-21 18:23:49

标签: android file move

在我的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 $ H.handleMessage(ActivityThread.java:1567)处的android.app.ActivityThread.ww12(ActivityThread.java)处的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)。 java.lang.reflect.Method.invoke上的Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:156)在android.app.ActivityThread.main(ActivityThread.java:6523) (本机方法)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)' android上的twistergames.de.testverschieben.MainActivity.onCreate(MainActivity.java:23)上的.de.testverschieben.MainActivity.copyFile(MainActivity.java:44)在android.android.app.Activity.performCreate(Activity.java:6915)上。 app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)在android.app.ActivityThread。- android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1567)的wrap12(ActivityThread.java)android.os.Looper.loop(Looper.java)的android.os.Handler.dispatchMessage(Handler.java:105) :156),位于android.app.ActivityThread.main(ActivityThread.java:6523),位于java.lang.reflect.Method.invoke(本机方法),位于com.and com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)的roid.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:942)

非常感谢!!

2 个答案:

答案 0 :(得分: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(由Twister Games原创)/world_resource_packs.json”的文件,并根据需要创建

答案 1 :(得分:0)

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