将文本文件导出到SD卡或外部存储器

3

我想把一个文本文件导出到用户定义的SD卡文件夹中,但它保存到SD卡上默认的文件夹中(即Local -> SD Card ->Android ->data)。

这里包括我的MainActivity。请帮我找出我的缺陷。

public class MainActivity extends AppCompatActivity {
  EditText editText;
  private int STORAGE_PERMISSION_CODE = 23;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.editText2);
  }

  @RequiresApi(api = Build.VERSION_CODES.KITKAT)
  public void savePrivate(View view) {
    String info = editText.getText().toString();
    File folder = getExternalFilesDir("sample"); // Folder Name
    File myFile = new File(folder, "myData2.txt"); // Filename
    writeData(myFile, info);
    editText.setText("");
    createFile(info);

  }
  private void writeData(File myFile, String data) {
    FileOutputStream fileOutputStream = null;
    try {
      fileOutputStream = new FileOutputStream(myFile);
      fileOutputStream.write(data.getBytes());
      Toast.makeText(this, "Done" + myFile.getAbsolutePath() +
        "sample/", Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (fileOutputStream != null) {
        try {
          fileOutputStream.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

  @RequiresApi(api = Build.VERSION_CODES.KITKAT)
  private void createFile(String text) {
    File root = null;
    File[] files = null;
    try {
      files = getExternalFilesDirs(Environment.DIRECTORY_DOCUMENTS);
      //Getting the path of the sdcard
      //Android/data/com.demo.sdcardandroid/files/Documents
      root = files[1];
      Log.i("SDCARD", "path.." + root.getAbsolutePath());
      //check sdcard permission
      if (root.canWrite()) {
        File fileDir = new File(root.getAbsolutePath());
        fileDir.mkdirs();

        File file = new File(fileDir, "samplefile.txt");
        FileWriter filewriter = new FileWriter(file);
        BufferedWriter out = new BufferedWriter(filewriter);
        out.write(text);
        out.close();
      }
    } catch (IOException e) {
      Log.e("ERROR:---", "Could not write file to SDCard" + e.getMessage());
    }
  }
}

你能详细说明一下你遇到了什么错误吗? - karanatwal.github.io
写入数据到文件:writeData(myFile, info);创建文件:createFile(info);你在写两个文件,这有点令人困惑。请只发布一个函数或者解释一下为什么需要两个函数。 - greenapps
我的问题是:我想将文件保存到SD卡中用户定义的文件夹中。目前我的文件都保存在SD卡中,但并没有保存到我自己在SD卡中创建的单独文件夹中。我还希望即使应用程序被卸载,这些文件也不会被删除。 - Remya Jacob
1个回答

0

你的问题在于:

getExternalFilesDirs(Environment.DIRECTORY_DOCUMENTS);

你应该使用:

Environment.getExternalStorageDirectory();

这是createFile方法应该看起来的样子:

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    private void createFile(String text) {
        File root = null;
        File path = null;
        try {
            path = Environment.getExternalStorageDirectory();
            //Getting the path of the sdcard
            //Android/data/com.demo.sdcardandroid/files/Documents
            Log.i("SDCARD", "path.." + root);
            //check sdcard permission
            if (path.canWrite()) {
                File file = new File(path, "samplefile.txt");
                FileWriter filewriter = new FileWriter(file);
                BufferedWriter out = new BufferedWriter(filewriter);
                out.write(text);
                out.close();
            }
        } catch (IOException e) {
            Log.e("ERROR:---", "Could not write file to SDCard" + e.getMessage());
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接