首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:使用ACTION_CREATE_DOCUMENT创建文件,然后写入文件

Android:使用ACTION_CREATE_DOCUMENT创建文件,然后写入文件
EN

Stack Overflow用户
提问于 2022-10-09 15:31:09
回答 1查看 32关注 0票数 1

我试图将一些数据导出为.csv文件,并希望能够使用Intent.ACTION_CREATE_DOCUMENT选择器将其保存在指定的文件中。

代码语言:javascript
运行
复制
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数据导出为文件。

代码语言:javascript
运行
复制
    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…

困难之处在于让代码的第二部分接受第一部分的文件。我使用的代码是

代码语言:javascript
运行
复制
    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异常。我花了一天的时间浏览文档和网络,但是,到目前为止,我还只是一堵砖墙。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-09 16:10:14

困难在于获取代码的第二部分来接受第一个文件

您不是在处理文件。其中,ACTION_CREATE_DOCUMENT在用户需要的地方创建文档,这可能是文件系统上的文件,也可能不是文件。

使用ContentResolveropenOutputStream()

代码语言:javascript
运行
复制
    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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74006079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档