无法在Android中写入外部SD卡

时间:2014-11-20 09:40:27

标签: android io android-sdcard

我正在尝试在外部SD卡文件夹中写入文件。即使在清单文件中设置了所需权限后,我也无法在外部SD卡上写入。

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

代码:

String path = "/mnt/extsd/nit.txt";

    File myFile = new File(path);

    if (!myFile.exists()) {
       try {
           myFile.createNewFile();
       } catch(Exception e)
       {
           txtText.setText("Failed-" + e.getMessage());
           e.printStackTrace();
       }
    }

try {
            FileOutputStream fostream = new FileOutputStream(myFile);
            OutputStreamWriter oswriter = new OutputStreamWriter(fostream);
            BufferedWriter bwriter = new BufferedWriter(oswriter);
            bwriter.write("Hi welcome ");
            bwriter.newLine();
            bwriter.close();
            oswriter.close();
            fostream.close();
            txtText.setText("success");
        } catch(Exception e)
        {
            txtText.setText("Failed-" + e.getMessage());
            e.printStackTrace();
        }

另一方面,当我使用ES文件资源管理器并尝试创建文件时,它会创建它而没有任何问题。

3 个答案:

答案 0 :(得分:1)

不要使用绝对路径String path = "/mnt/extsd/nit.txt";,因为您永远不会知道用户使用的Android设备。相反,您可以使用Environment.getExternalStorageDirectory().toString()获取外部存储目录路径。

答案 1 :(得分:0)

您应该能够调用Environment.getExternalStorageDirectory()来获取SD卡的根路径并使用它来创建FileOutputStream。从那里,只需使用标准的java.io例程。

File log = new File(Environment.getExternalStorageDirectory(), "your_file_name.txt");
    try {
        out = new BufferedWriter(new FileWriter(log.getAbsolutePath(), false));
        out.write("any data");

    } catch (Exception e) {

    }

不要忘记关闭溪流。

答案 2 :(得分:0)

首先检查SD卡是否可用。

String state = Environment.getExternalStorageState();
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
if (Environment.MEDIA_MOUNTED.equals(state))
{
File folder = folder = new File(extStorageDirectory, "FolderName");
if(!folder.exists())
{
    folder.mkdir();//making folder
}
File file = new File(folder,"Filename");//making file
}

请尝试使用此代码,它可以在我的应用程序中使用。