在我的应用程序中,用户可以选择一个目录,在其中使用隐含的意图action_open_document_tree创建Excel文件。但是,OnActivityResult()
中返回的Uri不能由FileOutputStream()
使用。它抛出FileNotFoundException
:
java.io.FileNotFoundException: content:/com.android.externalstorage.documents/tree/home%3A:test.xlsx (No such file or directory)
在OnActivityResult()
中,我通过file.exists()
检查路径是否存在,如果不存在,我要创建一个新的Excel文件。
onActivityResult():
@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);
}
}
}
createNewExcelFile():
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);
}
}
步骤1:获取从action_open_document_tree
获得的URI
并将其传递给documentfile.fromtreeURI()
。
步骤2:对DocumentFile
调用CreateFile()
以获得表示子文档DocumentFile
。
步骤3:对在步骤2中创建的DocumentFile
调用getURI()
。
步骤4:调用ContentResolver
上的OpenOutputStream()
,传入步骤3中的URI
,以获得可用于编写内容的OutputStream
。通过对某些上下文
(如活动
)调用GetContentResolver()
,可以获得ContentResolver
。
有关使用action_open_document_tree
的更多信息,请参阅此博文。
我有这个方法来获取Java程序运行的目录。 但是,当我创建一个新的实例并将此目录作为其父目录时,它会在驱动器的根目录中返回一个。 我期望这个文件的绝对路径是,但它的。
我正在尝试创建一个脚本,以便在动态创建一个新文件夹中执行假脱机操作这是我的代码 并且它给出了无法创建假脱机文件C:\Users\rjen01\Desktop\MAR\21MAR2017\U 1227的错误。csv 这是因为没有文件夹C:\Users\rjen01\Desktop\MAR。所以如何在spool命令中动态创建新文件夹。
问题内容: 我想编写一个检查目录是否存在的程序;如果该目录不存在,那么它将在其中创建目录和一个日志文件,但是如果该目录已经存在,则它将在该文件夹中创建一个新的日志文件。 我如何在Linux中用C做到这一点? 问题答案: 看看检查,如果该目录存在, 和,创建目录。 您可以使用和命令查看这些功能的手册。
问题内容: 我试图在该目录中创建一个新目录和一个文件。谁能告诉我我要去哪里错了? 我正在使用Windows系统,并且我希望该目录存在于我的文件所在的文件夹中。 问题答案: 基本上,正在发生的事情是,您正在创建一个名为的目录,然后尝试创建一个名为同一个东西的新文件,这显然行不通。 所以,而不是… 尝试… 额外 如果失败,实际上不会抛出任何异常,这很烦人,所以我会做更多类似的事情… 就这样我知道实际的
条件是,如果目录存在,则必须在该特定目录中创建文件,而不创建新目录。 下面的代码仅使用新目录创建一个文件,而不针对现有目录。例如,目录名类似于“GETDIRECTION”:
问题内容: 如果要在中创建文件,可以执行以下操作: 另外,我想用于创建文件。那我该怎么办呢?由于某种原因,该文件未在正确的目录中创建。 问题答案: 最好的方法是: