将字符串写入 .txt 文件,FileOutputStream 未按预期工作

Write string to a .txt file, FileOutputStream is not working as expected

我有一个应用程序,我想创建一个文本文件并在其中写入一些内容。我使用明确的意图 select 文件夹并创建文件,其中 mimeType=text/plain

 private void createFile(String mimeType, String fileName) {
    Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType(mimeType);
    intent.putExtra(Intent.EXTRA_TITLE, fileName);
    startActivityForResult(intent, WRITE_REQUEST_CODE);
}

创建文件后,我使用 onActivityResult 写入文件

if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
        Uri uri = resultData.getData();
        String path = uri.getPath();
        File file = new File(path);
        String filename = file.getName();
        try {
            verifyStoragePermissions(this); //method to access storage
            FileOutputStream outputStream = openFileOutput(filename,MODE_PRIVATE);
            outputStream.write("Message to write".getBytes());
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我的清单中也有许可

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我没有收到错误,但我的文件中没有任何内容。有人可以帮忙吗?

  1. ACTION_CREATE_DOCUMENT 给你一个 Uri 用于写入内容。 A Uri 不是文件.

  2. openFileOutput()是内部存储,不是外部存储,所以权限没有意义

  3. openFileOutput()ACTION_CREATE_DOCUMENT

  4. 无关
  5. 不要通过getBytes()

  6. 写字符串

从战术上讲,将您的第二个代码块替换为:

if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
    Uri uri = resultData.getData();

    try {
        OutputStream os=getContentResolver().openOutputStream(uri);
        PrintStream ps=new PrintStream(os);
        ps.print("Message to write");
        ps.flush();
        ps.close();
    } catch (Exception e) {
        Log.e("Some identifying string", "Exception writing to "+uri.toString(), e);
    }
}