Android 使用';创建文件:';以名义
这将导致创建一个文件Android 使用';创建文件:';以名义,android,storage-access-framework,Android,Storage Access Framework,这将导致创建一个文件some_file.txt,因此本质上:被替换为。 我正在尝试创建一个名为some:file.txt的文件,可以通过手机上的文件应用程序手动创建: 很明显,:字符没有限制,而且,我以前的java.io.File API从来没有遇到过这个问题 我也试过了 public void onActivityResult(int requestCode, int resultCode, Intent resultData) { if (resultCode != Activit
some_file.txt
,因此本质上:
被替换为。
我正在尝试创建一个名为some:file.txt
的文件,可以通过手机上的文件应用程序手动创建:
很明显,:
字符没有限制,而且,我以前的java.io.File API从来没有遇到过这个问题
我也试过了
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode != Activity.RESULT_OK)
return;
if (requestCode == CREATE_FILE && resultData != null) {
Uri uri = resultData.getData();
if (uri != null) {
DocumentFile file = DocumentFile.fromTreeUri(getContext(), uri);
try {
DocumentFile newFile = file.createFile("text/plain", "some:file");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
并选择手动创建的some:file.txt
,记录名称和uri,并使用“:`
Intent intent = new Intent(Intent.ACTION_GET_CONTENT)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("text/plain");
startActivityForResult(intent, OPEN_FILE);
编辑:
我能想到的一个解决方法是将所有文档保存到.zip存档中
我怎样才能避免呢
你不能。
createFile()
的第二个参数是“显示名称”,而不是文件名。文档提供程序对文件名的使用取决于文档提供程序。在您的情况下,它将用下划线替换一些特殊字符。您在Windows和Linux上尝试过吗?正如我所说,可以通过文件应用程序以及旧的文件API手动创建此类文件。一定有办法so@Guiorgy:操作系统制造商和设备制造商可能可以。你和我都不能。随着即将到来的Android R,我正试图转移到SAF,但以这种速度,应用程序将为所有用户中断
Intent intent = new Intent(Intent.ACTION_GET_CONTENT)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("text/plain");
startActivityForResult(intent, OPEN_FILE);
Uri: content://com.android.externalstorage.documents/document/primary%3ATEST%3AS%2Fsome%3Afile.txt
File: some:file.txt