- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,用户可以使用隐式 Intent ACTION_OPEN_DOCUMENT_TREE 选择创建 Excel 文件的目录。
然而,Uri 在 onActivityResult()
中返回。 FileOutputStream()
不能使用.它抛出一个 FileNotFoundException
:
java.io.FileNotFoundException: content:/com.android.externalstorage.documents/tree/home%3A:test.xlsx (No such file or directory)
onActivityResult()
我通过
File.exists()
检查路径是否存在如果没有,我想创建一个新的 Excel 文件。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
Log.d(TAG, "onActivityResult: called");
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == 2) {
Log.d(TAG, "onActivityResult: path = " + data.getData()
.getPath());
Uri treePath = data.getData();
File path = new File(treePath + File.pathSeparator + "test.xlsx");
if (path.exists()) {
updateExistingExcelFile(path);
} else {
createNewExcelFile(path);
}
}
}
private void createNewExcelFile(File path) {
Log.d(TAG, "createNewExcelFile: called");
Workbook workbook = new HSSFWorkbook();
Cell cell;
Sheet sheet;
sheet = workbook.createSheet("Name of sheet");
Row row = sheet.createRow(0);
cell = row.createCell(0);
cell.setCellValue("Name");
cell = row.createCell(1);
cell.setCellValue("Number");
sheet.setColumnWidth(0, (10 * 200));
sheet.setColumnWidth(1, (10 * 200));
FileOutputStream fileOutputStream;
try {
fileOutputStream = new FileOutputStream(path);
workbook.write(fileOutputStream);
Toast.makeText(this, "Created", Toast.LENGTH_LONG)
.show();
fileOutputStream.close();
} catch (IOException e) {
Log.e(TAG, "createNewExcelFile: ", e);
}
}
Activity.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
,代码可以正常工作或类似的东西,而不是隐含的 Intent 路径。
最佳答案
第 1 步:获取 Uri
您从 ACTION_OPEN_DOCUMENT_TREE
获得和 pass it to DocumentFile.fromTreeUri()
.
第 2 步:调用 createFile()
on that DocumentFile
获取 DocumentFile
代表子文档。
第 3 步:调用 getUri()
on the DocumentFile
您在步骤 #2 中创建的。
第 4 步:调用 openOutputStream()
on a ContentResolver
,传入Uri
从第 3 步开始,获取 OutputStream
可用于编写内容。你会得到一个 ContentResolver
调用 getContentResolver()
在一些 Context
,例如 Activity
.
见 this blog post更多关于使用 ACTION_OPEN_DOCUMENT_TREE
.
关于java - 在 Intent.ACTION_OPEN_DOCUMENT_TREE 返回的目录中创建新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61118918/
我想为我的应用程序提供 SD 卡的写入权限。我正在尝试使用存储访问框架来获取权限。 但是当我使用以下代码启动 Activity 时。 startActivityForResult(new Intent
我看到很多关于设置开始的问题 uri为 Intent.ACTION_OPEN_DOCUMENT_TREE但所有这些都需要一个 uri这是因为之前使用过该文件夹选择器。 我想要做的是将我的用户直接发送到
我正在尝试从连接到我的 Google Pixel 的 USB 存储设备读取文件。我目前正在使用这种方法来选择驱动器的路径,以便我可以查询它的内容 private static final String
使用 Intent.ACTION_OPEN_DOCUMENT_TREE 中的 FileChooser我希望能够在用户选择的位置写入文件。由于文件选择器返回一个树 URI,我使用了一个实用程序类,特别是
在我的应用程序中,用户可以使用隐式 Intent ACTION_OPEN_DOCUMENT_TREE 选择创建 Excel 文件的目录。 然而,Uri 在 onActivityResult() 中返回
我尝试编写一个 Android Instrumentation 测试,用户必须选择一个文件夹来保存一些文件。但我不知道如何创建intending 所需的结果。 下面的代码是我到目前为止想出的。 val
我读到我必须提前为 Android Q 版本准备我的应用程序,因为如果他们不撤销管理这些文件的新方法,那么对应用程序拥有的目录之外的文件的常见读/写访问可能会被弃用. 幸运的是,我没有那么多代码行需要
是否可以在使用 Intent.ACTION_OPEN_DOCUMENT_TREE 时指定“开始路径”? 当我这样使用它时: Intent chooseFolderIntent = new Inten
我的应用程序下载并解压缩特定文件夹中的文件: output = new FileOutputStream(realpath, true); output.write(buffer, 0, bytesR
我在我的应用程序(在 Android 5+ 中)中实现“选择保存目录”(对于所有文件)功能时遇到了问题。我需要的是一个目录选择器——所以我决定使用系统选择器——发送 Intent ACTION_OPE
我想要实现的是删除 sd 卡上的文件,我尝试了 file.delete 方法,但它不起作用,因为 sd 卡现在是只读的。 所以我阅读了一篇关于 SAF(存储访问框架)的文章,通过存储我们在 onAct
我只是尝试通过 ACTION_OPEN_DOCUMENT_TREE Intent 传递一个附加值,但我无法管理它。我需要显示树对话框,以便用户可以选择一个文件夹,我必须传递一些额外的信息。我已经将这种
这个问题在这里已经有了答案: How can I set the ACTION_OPEN_DOCUMENT_TREE start path the first time a user uses my
目录树选择器由 创建 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); ... 在 Android 5+ 上将所有选择的目录历
我是一名优秀的程序员,十分优秀!