当前位置: 首页 > 知识库问答 >
问题:

android Q测试版中的文件操作

公孙涵育
2023-03-14

1)将目标设置为Android.permission.write_external_storageAndroid Q

2)使用GetExternalStorageDirectoryGetExternalStoragePublicDirectoryFileOutputStream(file)保存文件抛出

java.io.fileNotfoundexception:/storage/emulated/0/myfolder/mytext.txt打开失败:ENOENT(没有这样的文件或目录)

3)使用GetExternalFilesDirAPI,保存成功,但即使在MediaScannerConnection.ScanFile之后也不会显示。

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

什么是最好的方法从内存复制文件到SDCARD在android Q和刷新。

共有1个答案

广献
2023-03-14

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

//首先,如果您使用“android.media.action.image_capture”选择文件,那么将该文件存储在应用程序专用路径(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();
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();
}
 类似资料:
  • 下列每一个test选项在满足条件时,返回0(真)。 -e 检测文件是否存在 -a 检测文件是否存在 等价于 -e。不推荐使用,已被弃用[^1]。 -f 文件是常规文件(regular file),而非目录或 设备文件 -s 文件大小不为0 -d 文件是一个目录 -b 文件是一个 块设备 -c 文件是一个 字符设备 device0="/dev/sda2" # / (根目录) if [ -b

  • 如果下面的条件成立返回真... -e 文件存在 -a 文件存在 这个和-e的作用一样. 它是不赞成使用的,所以它的用处不大。 -f 文件是一个普通文件(不是一个目录或是一个设备文件) -s 文件大小不为零 -d 文件是一个目录 -b 文件是一个块设备(软盘, 光驱, 等等.) -c 文件是一个字符设备(键盘, 调制解调器, 声卡, 等等.) -p 文件是一个管道 -h 文件是一个符号链接 -L 文

  • import { QuoteComponent } from './quote.component'; import { provide } from '@angular/core'; import { async, TestBed, fakeAsync, tick, } from '@angular/core/testing'; class MockQuoteService {

  • 我使用Jest框架,并有一个测试套件。我想关闭/跳过我的一个测试。 谷歌文档并没有给我答案。 你知道要查的答案或信息来源吗?

  • 问题内容: 我想重新讨论提出的有关在使用selenium的Nightwatch.js中测试文件上传的问题。 推荐使用两个链接将文件输入元素的值设置为url的解决方案。在我的用例中,我无法使其正常工作。即使在夜视之外,在的输入中手动设置value标签,也不会更改url。我已经在开发工具中的Chrome,Firefox和IE10上进行了尝试。 我看过的另一种解决方案是尝试模拟整个文件上传过程的击键。这

  • 我正在创建minecraft插口插件,如何测试玩家是否为op? 例如在 我可以用。我没有得到许可。有这样的东西可以用来检查op吗?op有所有权限吗?