首页 文章

移动文件的代码不起作用

提问于
浏览
-1

在我的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:FATAL EXCEPTION:main进程:twistergames.de.testverschieben,PID:11228 java.lang.RuntimeException:无法启动活动ComponentInfo {twistergames.de.testverschieben / twistergames.de.testverschieben.MainActivity}:java.lang .NullPointerException:尝试在android上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2793)的空对象引用上调用虚方法'void java.io.FileOutputStream.write(byte [],int,int)' . app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)位于android.app.Handler上android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1567)的android.app.ActivityThread.-wrap12(ActivityThread.java) . dispatchMessage(Handler.java:105)位于android.app.Looper.loop(Looper.java:156)的android.app.ActivityThread.main(ActivityThread.java:6523),位于java.lang.reflect.Method.invoke(Native)方法)在com.android.internal.os.Zygot的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:942) eInit.main(ZygoteInit.java:832)引起:java.lang.NullPointerException:尝试在twistergames上的空对象引用上调用虚方法'void java.io.FileOutputStream.write(byte [],int,int)'在android的android.app.Activity.performCreate(Activity.java:6915)的twistergames.de.testverschieben.MainActivity.onCreate(MainActivity.java:23)中的.de.testverschieben.MainActivity.copyFile(MainActivity.java:44) . 位于android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746)的app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123),android.app.ActivityThread.-的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)在android.O.上运行android.app.A.运行时,Android.O.Roper.loop(Looper.java)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1567)上的wrap12(ActivityThread.java)(Handler.java:105) :156)位于com.android.int的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:6523) ernal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:942)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

非常感谢你!!!

2 回答

  • 0

    这是实际的错误描述:

    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

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

相关问题