我试图将一些数据导出为.csv文件,并希望能够使用Intent.ACTION_CREATE_DOCUMENT选择器将其保存在指定的文件中。
private void fileDemo() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.setType("text/csv");
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(Intent.EXTRA_TITLE, "data.csv");
startActivityForResult(intent, PICKFILE_RESULT_CODE);
}
它工作良好,并创建了一个零字节正确命名的文件。我还创建了一个方法,如果我将数据保存到具有固定名称的文件中,该方法将将CSV数据导出为文件。
File path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOCUMENTS);
File file = new File(path, "Waypoints.csv");
try {
CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
// rest of code…
困难之处在于让代码的第二部分接受第一部分的文件。我使用的代码是
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case PICKFILE_RESULT_CODE:
if (resultCode == -1) {
fileUri = data.getData();
filePath = fileUri.getPath();
}
try {
FileWriter fileWriter = new FileWriter(filePath); // FileNotFound exception here
// file writing code goes here
} catch (IOException e) {
throw new RuntimeException(e);
它将引发一个FileNotFound异常。我花了一天的时间浏览文档和网络,但是,到目前为止,我还只是一堵砖墙。有什么想法吗?
发布于 2022-10-09 16:10:14
困难在于获取代码的第二部分来接受第一个文件
您不是在处理文件。其中,ACTION_CREATE_DOCUMENT
在用户需要的地方创建文档,这可能是文件系统上的文件,也可能不是文件。
使用ContentResolver
和openOutputStream()
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case PICKFILE_RESULT_CODE:
if (resultCode == -1) {
try {
OutputStream os = getContentResolver().openOutputStream(data.getData());
Writer writer = new OutputStreamWriter(os);
// content writing code goes here
} catch (IOException e) {
throw new RuntimeException(e);
https://stackoverflow.com/questions/74006079
复制相似问题