我的应用html" target="_blank">程序( 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 ,应用程序失败,异常java.lang.NullPointerException
的outChannel = new FileOutputStream(dst).getChannel();
,但对象DST是不是空。
在 方法3中 ,我决定验证目标对象是否存在,并在需要时创建一个文件夹,但是当我检查是否可以写时,检查返回false
。
我尝试了几种其他方法,这些方法成功创建了一个空文件夹,但实际上没有文件被复制。
由于这是我迈向Android的第一步,因此我觉得我错过了一些小事情。请指出我,如何将文件从一个文件夹复制到Android中的另一个文件夹,包括文件从内部存储器移动到外部存储器。
我解决了我的问题。问题出在原始代码中的目标路径中:
File dst = new File(dstPath);
该变量dstPath
具有完整的目标路径,包括文件名,这是错误的。这是正确的代码片段:
String dstPath = Environment.getExternalStorageDirectory() + File.separator + "myApp" + File.separator;
File dst = new File(dstPath);
exportFile(pictureFile, dst);
private File exportFile(File src, File dst) throws IOException {
//if folder does not exist
if (!dst.exists()) {
if (!dst.mkdir()) {
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File expFile = new File(dst.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
FileChannel inChannel = null;
FileChannel outChannel = null;
try {
inChannel = new FileInputStream(src).getChannel();
outChannel = new FileOutputStream(expFile).getChannel();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
return expFile;
}
感谢您的提示。
这些方法都不能解决我的任务。中检查了一些相关主题,我发现的唯一建议是验证 在中,并且它仍然存在。 方法#1完成执行,但没有复制文件夹和文件。 因为这是我迈向Android的第一步,我觉得我错过了一些小东西。请告诉我,如何在Android中将文件从一个文件夹复制到另一个文件夹,包括文件从内部内存移动到外部内存。
我试图使用Adobe reader读取从服务器下载的pdf文件,但问题是当我将其存储在内部存储时,其他应用程序无法读取该文件。现在我想知道如何将此文件复制到外部存储(/sdcard/)中,以便pdf查看器可以查看。 由于安全原因,我将文件存储在内部存储,然后删除外部存储的文件。 我的问题是如何复制保存在内部存储中的文件,而不使用raw或将其放入InputStream中的资产。
问题内容: 如何复制到外部存储保持,以便以后可以共享首选项。 试图读取并另存为一个文件,创建了类型,但我需要一个。想过遍历应用程序的内部存储和复制文件,然后将其放入外部存储,但这可能太复杂了。 真的很想知道是否存在一种简单而明智的方式来传递`sharedpreferences。 问题答案: 使用此代码, 并取回它, 注意 使用此代码只能处理字符串类型首选项,
问题内容: 美好的一天! 我刚刚开始为Android开发。在我的应用中,我需要将资产文件夹中的项目复制到内部存储中。 我在SO上进行了大量搜索,包括将其复制到外部存储的内容。 这就是我要实现的目标:内部存储中已经存在一个目录,即X> Y> Z。我需要将一个文件复制到Y,将另一个复制到Z。 任何人都可以通过代码片段帮助我吗?我真的不知道该如何继续。 对不起,我的英语不好。 非常感谢。 问题答案: 用
在我的应用程序中,有一个由sqlite创建的数据库。我想将数据库复制到下载文件夹。我使用的是不同的方式,但并没有在真实的设备上工作(它说拒绝访问目录),可能是它想要根手机。请帮助,我想提供一个访问权限,以便用户可以从下载文件夹获取数据库。 请注意,我使用的是最新版本的android studio。 在下面给定的DatabaseHelper类中。在exportDB()方法中,我要实现这一点。
问题内容: 我正在从Internet下载文件,并将流数据保存到getFilesDir()给定的应用程序内部存储中的临时文件中。 下载完成后,我需要将临时文件移动到外部存储器(通常是SD卡)上的下载目录中。但是由于某种原因,File.renameTo()对此不起作用。我猜是有问题的,因为它是两个单独的文件系统,但是我仍然可以直接下载到SD卡,并且文件URI是正确的。 是否有另一种简单快捷的方法将该文