首页 > 解决方案 > 使用 ACTION_CREATE_DOCUMENT 创建 CSV 文件

问题描述

我正在尝试使用 ACTION_CREATE_DOCUMENT 意图创建一个专门为 .csv 文件类型的文件。这是我目前拥有的代码:

Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TITLE, ".csv");
startActivityForResult(intent, myRequestCode);

这是我的 onActivityResult 的代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent dataIntent) {
    super.onActivityResult(requestCode, resultCode, dataIntent);

    // TODO: make the requestCode a global variable
    if (resultCode == RESULT_OK && dataIntent != null ) {
        if (requestCode == 0) { // user clicked "Database CSV"
            try {
                if(! dataIntent.getData().getPath().endsWith(".csv")) {
                    
                }

                OutputStream outputStream = getContentResolver().openOutputStream(dataIntent.getData());
                myDb.export_toDatabaseCSV_withOutputStream(outputStream);
                Toast.makeText(getApplicationContext(), "Successfully exported.", Toast.LENGTH_LONG).show(); // TODO: make this an actual check based on the result of myDb.export
            } catch (Exception e) {
                Toast.makeText(getApplicationContext(), "File could not be created.", Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }
    }
}

从 dataIntent.getData().getPath() = "/document/primary:Download/myFileName" 返回的 Uri 路径。我似乎找不到在 if 语句中编辑文件名的方法。

EXTRA_TITLE 具有与我想要的类似的功能,但不是我所需要的。我希望用户能够在活动中指定文件名,而不必将 .csv 添加到文件名的末尾。例如,如果用户创建了一个名为“MyData”的文件,当活动结束时,我希望将该文件重命名为“MyData.csv”。

标签: androidandroid-studioandroid-intent

解决方案


使用这个,它应该工作

   intent.setType("text/comma-separated-values")

如果可能,请与我们分享您使用过的此功能 myDb.export_toDatabaseCSV_withOutputStream(outputStream);


推荐阅读