将图片/视频文件保存到子文件夹

时间:2016-07-25 20:40:13

标签: android android-internal-storage

我知道类似的问题已经在这里问了很多,但我找不到适合我的答案。

我有一个File对象,其路径指向SD卡(外部存储器)。例如:

 File selectedFile = new File("/storage/emulated/0/Pictures/Screenshots/Screenshot_20160725-185624.png");

我现在要做的是将该图片/视频保存到我应用内部存储空间的子文件夹中。

例如,将文件保存到此处: INTERNAL_STORAGE / 20 / public_gallery / 300.png

我遇到的问题是我正在使用

outputStream = context.openFileOutput("20/public_gallery/300.png", Context.MODE_PRIVATE);
...
outputStream.write(content.getBytes());
...

我不能对子文件夹使用任何“/”。

如果有人能为我提供一个小代码示例,我将非常感激。

2 个答案:

答案 0 :(得分:0)

试试这个:

path = Environment.getExternalStorageDirectory() + "/your_app_folder" + "/any_subfolder/" + "filename.extension"
file = new File(destFilePath);
FileOutputStream out = null;
try {
  out = new FileOutputStream(file);
  ...
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if(out!=null) {
        out.close();
    }
}

" /"我猜不应该成为一个问题。

答案 1 :(得分:0)

在办公室的项目中找到解决方案。

以下是有关如何将文件保存到用户使用文件浏览器对话框选择的内部存储的完整工作示例:

public boolean copyFileToPrivateStorage(File originalFileSelectedByTheUser, Contact contact) {

    File storeInternal = new File(getFilesDir().getAbsolutePath() + "/76/public"); // "/data/user/0/net.myapp/files/76/public"
    if (!storeInternal.exists()) {
        storeInternal.mkdirs();
    }
    File dstFile = new File(storeInternal, "1.png"); // "/data/user/0/net.myapp/files/76/public/1.png"

    try {
        if (originalFileSelectedByTheUser.exists()) {
            // Now we copy the data of the selected file to the file created in the internal storage
            InputStream is = new FileInputStream(originalFileSelectedByTheUser);
            OutputStream os = new FileOutputStream(dstFile);
            byte[] buff = new byte[1024];
            int len;
            while ((len = is.read(buff)) > 0) {
                os.write(buff, 0, len);
            }
            is.close();
            os.close();

            return true;
        } else {
            String error = "originalFileSelectedByTheUser does not exist";
            return false;
        }
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

需要File" originalFileSelectedByTheUser"它位于外部存储器的某个位置,例如Screenshots目录,并将其副本保存到" dstFile"中的位置。在内部存储中,只有应用程序才能访问该文件。