我编写了以下代码来写入外部存储上的文件:
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是多余的,但我正在测试它是否只是其中一个不起作用。
当我运行时,文件是在正确的位置创建的,但程序拒绝为文件写“ - 新记录”或“新记录”,文件只是空的。
鉴于该文件已创建,似乎我错过了一个非常简单的步骤,但如果我能看到它,我该死的。有什么想法吗?
答案 0 :(得分:2)
您忘了在flush()
上致电close()
和FileWriter
。
我还想指出以下代码是不必要的:
root.setWritable(true);
root.setReadable(true);
对getExternalStorageDirectory()
的调用默认返回可读/可写File
(假设您已为应用程序提供了适当的权限)。
最后一件事。请确保在使用外部存储器进行任何操作之前,始终致电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();
}
希望这有帮助。