0

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

    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 是多余的,但我正在测试它是否只是其中一个不起作用。

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

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

4

2 回答 2

2

你忘了打电话flush()close()你的FileWriter


编辑#1:

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

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

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


编辑#2:

最后一件事。请确保在您对外部存储进行任何操作之前,您始终致电getExternalStorageState()检查媒体是否可用。媒体可能已安装到计算机、丢失、只读或处于其他状态。有关更多信息,请参阅文档

于 2012-05-24T23:45:14.737 回答
1

我认为您必须调用 flush() 才能实际写入文件。我认为仅调用 write(...) 只会将其添加到要写入的缓冲区中。这里有一个简单的用法示例:

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

希望这可以帮助。

于 2012-05-24T23:40:58.713 回答