在我的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)
非常感谢!!
答案 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+,请转到“设置”->“应用程序”->“您的应用程序”->“权限”,然后在此处授予权限。这是测试的临时修补程序。从长远来看,您应该请求运行时权限。