我的应用(Android API 15)制作了一张图片并将其存储在内部存储器的文件夹中。现在,我想将此文件复制到外部存储器中的另一个文件夹中,例如/sdcard/myapp
。我尝试了以下方法:
方法1:
private void copyFile(File src, File dst) throws IOException {
File from = new File(src.getPath());
File to = new File(dst.getPath());
from.renameTo(to);
}
方法2:
private void copyFile(File src, File dst) throws IOException {
FileChannel inChannel = null;
FileChannel outChannel = null;
try {
inChannel = new FileInputStream(src).getChannel();
outChannel = new FileOutputStream(dst).getChannel();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}
方法3:
private void copyFile(File src, File dst) throws IOException {
FileInputStream inStream = new FileInputStream(src);
if (!dst.exists()) {
dst.mkdir();
}
if (!dst.canWrite()) {
System.out.print("CAN'T WRITE");
return;
}
FileOutputStream outStream = new FileOutputStream(dst);
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
inStream.close();
outStream.close();
}
这些方法都不能解决我的任务。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在AndroidManifest.xml
中,它确实存在。
***方法#1***完成执行,但不复制任何文件夹和文件。
在***方法#2***中,应用程序在outChannel = new FileOutputStream(dst).getChannel();
处出现异常java.lang.NullPointerException
,但对象dst不是空值。
在***方法#3***中,我决定验证目标对象是否存在,如果需要,它将创建一个文件夹,但是当我检查是否可以写入时,检查返回false
。
我尝试了几种额外的方法,它们成功地创建了一个空文件夹,但没有真正复制任何文件。
由于这是我走向Android的第一步,我觉得我错过了一些小东西。请告诉我,如何在Android中将文件从一个文件夹复制到另一个文件夹,包括将文件从内部存储器移动到外部存储器。
2条答案
按热度按时间nfs0ujit1#
我解决了我的问题。问题出在目标路径中,在原始代码中:
变量
dstPath
包含完整的目标路径,包括文件名,这是错误的。以下是正确的代码片段:第一次
谢谢你的提示。
pobjuy322#
Kotlinhttps://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-file/copy-to.html