android - android Q beta中的文件操作

标签 android fileoutputstream android-10.0

1)目标设置为Android Qandroid.permission.WRITE_EXTERNAL_STORAGE
2) 使用getExternalStorageDirectorygetExternalStoragePublicDirectoryFileOutputStream(file)保存文件抛出
java.io.FileNotFoundException: /storage/emulated/0/myfolder/mytext.txt open failed: ENOENT (No such file or directory)
3) 使用getExternalFilesDir api 和保存是成功的,但即使在 MediaScannerConnection.scanFile 之后也不会显示.

     /storage/emulated/0/Android/data/my.com.ui/files/Download/myfolder/mytext.txt

在android Q中将文件从内部存储器复制到SDCARD并刷新的最佳方法是什么?

最佳答案

在 Android API 29 及更高版本中,您可以使用以下代码将文件、图像和视频存储到外部存储。

//首先,如果您使用“android.media.action.IMAGE_CAPTURE”选择文件
然后将该文件存储在应用程序私有(private)路径(getExternalFilesDir())中,如下所示。

File destination = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), fileName);

//然后使用内容提供者访问媒体存储,如下所示。
 ContentValues values = new ContentValues(); 
 values.put(MediaStore.Images.Media.TITLE, fileName); 
 values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);

//如果您想要特定的 mime 类型,请在此处指定您的 mime 类型。否则将其留空,它将采用默认文件 mime 类型
values.put(MediaStore.Images.Media.MIME_TYPE, "MimeType"); 
values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1000); 
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); 
values.put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/" + "path"); // specify 
 storage path

//使用内容提供者插入媒体存储,它将返回 URI。
Uri uri = cxt.getContentResolver().insert(MediaStore.Files.getContentUri("external"), values); 

//使用该URI打开文件。
ParcelFileDescriptor descriptor = context.getContentResolver().openFileDescriptor(uri,"w"); //"w" specify's write mode
FileDescriptor fileDescriptor = descriptor.getFileDescriptor();

//从私有(private)路径读取文件。
InputStream dataInputStream = cxt.openFileInput(privatePath_file_path);

//将文件写入输出文件流。
 OutputStream output = new FileOutputStream(fileDescriptor);
 byte[] buf = new byte[1024];
 int bytesRead;
 while ((bytesRead = dataInputStream.read(buf)) > 0) 
 {
  output.write(buf, 0, bytesRead);
 }
 datanputStream.close();
 output.close();
}

关于android - android Q beta中的文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57370669/

相关文章:

android - 获取Android系统强调色(Android 10 System color accent)

android - 向临时缓存文件android写入和读取位图时出错?

android - 在 Android 10 上运行时,如何授予在 DIRECTORY_DOWNLOADS 中存储的权限?

java - 如何从Android连接到Spring Websocket

android - 在 ChildItem 中单击按钮时折叠 ExpandableListView GroupItem

java - 如何在未启用扬声器电话模式的情况下在通话中播放音频?

Java - 复制 Jar 文件夹

java - 如何在java中生成ZipFile

android - 对Android设备上的文件系统感到困惑

android - 下载管理器不适用于 Android 10 (Q)