首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Android 11中将文件从路径复制到路径

在Android 11中,将文件从一个路径复制到另一个路径可以通过以下步骤实现:

  1. 获取源文件的Uri:可以使用FileProvider类来获取文件的Uri,该类提供了安全的文件共享机制。使用FileProvider.getUriForFile()方法,传入上下文、授权提供者的authority和源文件路径,即可获取到源文件的Uri。
  2. 创建目标文件的Uri:同样使用FileProvider.getUriForFile()方法,传入上下文、授权提供者的authority和目标文件路径,即可获取到目标文件的Uri。
  3. 执行文件复制操作:使用ContentResolveropenInputStream()方法打开源文件的输入流,再使用ContentResolveropenOutputStream()方法打开目标文件的输出流。然后,通过读取源文件的输入流并将数据写入目标文件的输出流,即可完成文件的复制操作。

以下是一个示例代码,演示了如何在Android 11中将文件从一个路径复制到另一个路径:

代码语言:txt
复制
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;

import androidx.core.content.FileProvider;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileCopyUtil {

    public static void copyFile(Context context, String sourceFilePath, String destinationFilePath) throws IOException {
        // 获取源文件的Uri
        Uri sourceUri = getFileUri(context, sourceFilePath);

        // 创建目标文件的Uri
        Uri destinationUri = getFileUri(context, destinationFilePath);

        // 执行文件复制操作
        copyFileFromUri(context, sourceUri, destinationUri);
    }

    private static Uri getFileUri(Context context, String filePath) {
        File file = new File(filePath);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            // Android 10及以上版本使用MediaStore的API获取文件的Uri
            return MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY, file.getId());
        } else {
            // Android 9及以下版本使用FileProvider获取文件的Uri
            return FileProvider.getUriForFile(context, "com.example.fileprovider", file);
        }
    }

    private static void copyFileFromUri(Context context, Uri sourceUri, Uri destinationUri) throws IOException {
        ContentResolver contentResolver = context.getContentResolver();

        try (InputStream inputStream = contentResolver.openInputStream(sourceUri);
             OutputStream outputStream = contentResolver.openOutputStream(destinationUri)) {
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        }
    }
}

请注意,上述示例代码中使用了FileProvider来获取文件的Uri,需要在AndroidManifest.xml文件中进行相应的配置。具体配置方式可以参考Android官方文档

此外,为了确保文件复制操作的顺利进行,需要在AndroidManifest.xml文件中添加相应的权限声明。例如,如果要复制外部存储上的文件,需要添加以下权限声明:

代码语言:txt
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

以上是在Android 11中将文件从一个路径复制到另一个路径的方法。这种方式适用于各种文件类型,包括图片、视频、音频、文档等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券