在android中移动并重命名文件

时间:2014-06-10 15:22:06

标签: java android file copy

我正在尝试将文件复制到android中的另一个文件夹,但到目前为止,我没有成功。我设法使用选定的图像和拍照时,而不是文件。

我已经阅读并尝试了社区传递的几种解决方案(通过论坛和互联网搜索),但在复制时没有一个能够解决我的问题。

首先要做的事情。我将权限添加到我的清单中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

之后,在复制文件之前,我打印其文件路径和目录文件路径:

  

06-10 11:11:11.700:I / System.out(1442):/ mimetype / storage / sdcard / Misc / Javascript erros for IE.doc中的提交和计划按钮

     

06-10 11:11:11.710:I / System.out(1442):/ storage / sdcard / files / queue

都存在:

将文件复制到我使用FileUtils的预期文件夹:

        try {
            FileUtils.copyFile(selectedFile, dir);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

问题是:我没有例外,文件也没有。我试过这个解决方案: How to move/rename file from internal app storage to external storage on Android?

同样的事情,没有例外,但也没有文件。

** **编辑

这就是我获取文件的方式。

        Uri uri = data.getData();
        File selectedFile = new File(uri.getPath());
        File dir = new File(Environment.getExternalStorageDirectory(), "files/queue");

为了获得图像,我这样做:

            Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        saveChecklistImage(BitmapFactory.decodeFile(picturePath));

当我调用BitmapFactory.decodeFile(picturePath)时,我在这里检索文件,然后,我保存它没有问题。 文件是否也应遵循此标准?

** **解决方案

我在这篇文章中找到了一种方法: android get real path by Uri.getPath()

特别是这种方法:

private String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file path
    result = contentURI.getPath();
} else { 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    result = cursor.getString(idx);
    cursor.close();
}
return result;

我正在用图像做同样的事情,但是以更聪明的方式; D

比我更容易。 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

如果参数2是您应该使用copyFileToDirectory的目录。

答案 1 :(得分:0)

copyFile()不会将目录作为第二个参数(请参阅here)。它需要文件(作为源)和文件(作为目标)。首先创建一个空文件:

File file = new File(dir+"/newfile.doc");
if (!file.exists()) {
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

使用它代替dir。或者用Travis的方式。也可以在文件名中用_替换[space]。