在android中传输文件



我已经挣扎了两天,试图理解在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();

以及去除冗余存在检查。目前,您正在将文件本身创建为一个目录。

相关内容

  • 没有找到相关文章

最新更新