Android应用程序写入sdcard文件

时间:2012-05-24 23:31:38

标签: android filewriter

我编写了以下代码来写入外部存储上的文件:

    public static BufferedWriter out;
    private void createFileOnDevice(Boolean append) throws IOException {
            File Root = Environment.getExternalStorageDirectory();
            Log.d("File",Root.toString());
            Root.setWritable(true);
            Root.setReadable(true);
            Log.d("File","Writable: " + Root.canWrite());
            if(Root.canWrite()){
                 File  LogFile = new File(Root, "/Android/DriverInterfaceSystem");
                 if(!LogFile.mkdirs()){
                     Log.d("File","Couldn't make directories");
                 }
                 LogFile = new File(LogFile, "/trace.txt");

                 Log.d("File",LogFile.toString());
                 try{
                     FileWriter LogWriter = new FileWriter(LogFile, true);
                     LogWriter.write("--- New Record ---");
                     out = new BufferedWriter(LogWriter);
                 } catch(IOException e){
                     Log.d("File","FileWriter failed");
                 }

                 out.write("New record");

            }
    }

我已将Manifest中的权限设置为WRITE_EXTERNAL_STORAGE

我知道同时拥有FileWriter和BufferedWriter是多余的,但我正在测试它是否只是其中一个不起作用。

当我运行时,文件是在正确的位置创建的,但程序拒绝为文件写“ - 新记录”或“新记录”,文件只是空的。

鉴于该文件已创建,似乎我错过了一个非常简单的步骤,但如果我能看到它,我该死的。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您忘了在flush()上致电close()FileWriter


编辑#1:

我还想指出以下代码是不必要的:

root.setWritable(true);
root.setReadable(true);

getExternalStorageDirectory()的调用默认返回可读/可写File(假设您已为应用程序提供了适当的权限)。


编辑#2:

最后一件事。请确保在使用外部存储器进行任何操作之前,始终致电getExternalStorageState()以检查介质是否可用。媒体可能安装在计算机上,丢失,只读或处于其他状态。有关详细信息,请参阅documentation

答案 1 :(得分:1)

我认为你必须调用flush()来实际写入文件。我认为只是调用write(...)只会将它添加到要写入的缓冲区中。这是一个快速的使用示例:

FileWriter fWriter;
try{
    fWriter = new FileWriter(“\sdcard\filename.txt”);
    fWriter.write(yourString);
    fWriter.flush();
    fWriter.close();
}catch(Exception e){
    e.printStackTrace();
}

希望这有帮助。