尝试以编程方式复制文件时强制关闭-Android/Java
我正试图通过以下方式以编程方式复制文件:尝试以编程方式复制文件时强制关闭-Android/Java,java,android,copy,fatal-error,forceclose,Java,Android,Copy,Fatal Error,Forceclose,我正试图通过以下方式以编程方式复制文件: public void function1(int id) { Toast.makeText(this, "Copy", Toast.LENGTH_SHORT).show(); try { copyDirectoryOneLocationToAnotherLocation(currentDir, currentDir); } catch (IOException e) { // TODO Auto
public void function1(int id) {
Toast.makeText(this, "Copy", Toast.LENGTH_SHORT).show();
try {
copyDirectoryOneLocationToAnotherLocation(currentDir, currentDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void copyDirectoryOneLocationToAnotherLocation(
File sourceLocation, File targetLocation) throws IOException {
if (sourceLocation.isDirectory()) {
if (!targetLocation.exists()) {
targetLocation.mkdir();
}
String[] children = sourceLocation.list();
for (int i = 0; i < sourceLocation.listFiles().length; i++) {
copyDirectoryOneLocationToAnotherLocation(new File(
sourceLocation, children[i]), new File(targetLocation,
children[i]));
}
} else {
InputStream in = new FileInputStream(sourceLocation);
OutputStream out = new FileOutputStream(targetLocation);
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
在线:
copyDirectoryOneLocationToAnotherLocation(currentDir, currentDir);
我想我可能使用了在CopyDirectoryOneLocation中传递到其他位置的不正确参数
我想也许我应该使用:sourceLocation,targetLocation,但这对我来说也不管用
日志:
如果您在这一行上得到一个
NullPointerException
:
copyDirectoryOneLocationToAnotherLocation(currentDir, currentDir);
这意味着
currentDir
为空。我看不到您将其分配给代码中的任何内容,因此将其分配给目录,然后它将不再为空。我是否会使用诸如currentDir=new File(“/sdcard/”)之类的内容@Droidzilla是的,但是您必须找到currentDir
(我假设文件所在的位置),然后moveToDir
(文件所在的位置),然后使用它来代替/sdcard/
,可能还有一些类似的内容:currentDir=newfile(getApplicationInfo().dataDir);谢谢我刚才试过使用这个:currentDir=newfile(getApplicationInfo().dataDir);moveToDir=新文件(getApplicationInfo().dataDir);CopyDirectoryOneLocation到另一个位置(currentDir、moveToDir);但它似乎没有复制:((toast正在出现,但它不再崩溃!)@Droidzilla这可能是因为您没有选择要传输的文件。您需要获取一个文件,而不是一个目录来传输currentDir
,我不确定moveToDir
。您可能需要尝试一下。
01-09 15:54:49.026: E/AndroidRuntime(15378): FATAL EXCEPTION: main
01-09 15:54:49.026: E/AndroidRuntime(15378): java.lang.NullPointerException
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.example.project.FileChooser.copyDirectoryOneLocationToAnotherLocation(FileChooser.java:205)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.example.project.FileChooser.copyDirectoryOneLocationToAnotherLocation(FileChooser.java:207)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.example.project.FileChooser.function1(FileChooser.java:164)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.example.project.FileChooser.onContextItemSelected(FileChooser.java:148)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.app.Activity.onMenuItemSelected(Activity.java:2597)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:3663)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:963)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.widget.AbsListView.performItemClick(AbsListView.java:1128)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2812)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.widget.AbsListView$1.run(AbsListView.java:3571)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.os.Handler.handleCallback(Handler.java:725)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.os.Handler.dispatchMessage(Handler.java:92)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.os.Looper.loop(Looper.java:153)
01-09 15:54:49.026: E/AndroidRuntime(15378): at android.app.ActivityThread.main(ActivityThread.java:5297)
01-09 15:54:49.026: E/AndroidRuntime(15378): at java.lang.reflect.Method.invokeNative(Native Method)
01-09 15:54:49.026: E/AndroidRuntime(15378): at java.lang.reflect.Method.invoke(Method.java:511)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
01-09 15:54:49.026: E/AndroidRuntime(15378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-09 15:54:49.026: E/AndroidRuntime(15378): at dalvik.system.NativeStart.main(Native Method)
copyDirectoryOneLocationToAnotherLocation(currentDir, currentDir);