我已经挣扎了两天,试图理解在Android中将文件复制到SD卡的过程。到目前为止,我尝试的方法似乎都不起作用。
我的应用程序有个人资料图片设置。我需要启动Intent来选择图像,然后我需要将图像复制到SD卡上的新路径,然后返回新图像的Uri,此时我检查图像方向(三星图片有时似乎旋转了90度)。然后,我正确地旋转图像,然后将Uri保存到SharedPreferences文件中,以便在应用程序中使用。
这是我的意向电话:
case R.id.ib_userImage:
i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i, 1);
break;
这是我目前在复制功能上的可怕尝试,我已经改变了很多,我并没有很失落。
public static void copyImage(上下文上下文,Uri-Uri){
Log.i("ATTENTION", "Inside the Copy Function");
Log.i("ATTENTION", "Trying to copy file: " + uri.toString());
try {
String outputPath = Environment.getExternalStorageDirectory() + "/appname/images/";
File dir = new File(outputPath);
if(!dir.exists()) {
dir.mkdirs();
}
Log.i("ATTENTION", "Destination File Created at: " + dir.toURI().toString());
InputStream in = context.getContentResolver().openInputStream(uri);
OutputStream out = new FileOutputStream(dir);
byte[] buffer = new byte[1024];
while(in.read(buffer) > 0) {
out.write(buffer);
}
out.flush();
out.close();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("ATTENTION", "File Copied");
}
谢谢你的帮助,我会提供你可能需要的任何其他信息。
更新:
我现在在写入过程中遇到以下异常
java.io.FileNotFoundException:/storage/emulated/0/appname/images:open failed:EISDIR(是目录);
我的理解是,我指定了一个目录,代码如下:
String outputPath = Environment.getExternalStorageDirectory() + "/medinfo/images/";
File dir = new File(outputPath);
if(!dir.exists()) {
dir.mkdirs();
}
然后将其传递到OutputStream:
OutputStream out = new FileOutputStream(dir);
OutputStream将在该目录中为我创建文件。
我不认为这实际上是在试图打开目录。
read().
返回的计数
while ((count = in,read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
编辑您的目录问题通过以下方式解决:
dir.getParentFile().mkdirs();
以及去除冗余存在检查。目前,您正在将文件本身创建为一个目录。