目录
所遇问题
outputStreamWriter.write写文件,文件为空,实例如下:
OutputStreamWriter outputStreamWriter = null;
try {
File filePath = new File(path);
if(!filePath.exists()) {
filePath.mkdirs();
}
String fileName = path + File.separatorChar + name;
File file = new File(fileName);
if (!file.exists()){
file.createNewFile();
}
FileOutputStream outputStream = new FileOutputStream(file);
if (outputStream != null){
outputStreamWriter = new OutputStreamWriter(outputStream, "utf-8");
outputStreamWriter.write(data);
}
}
catch (IOException e) {
Log.e(TAG, "IOException: " + e);
}
finally {
try {
if (outputStreamWriter != null){
outputStreamWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
解决思路
经过多方验证,发现没有任何异常,文件就是空,后来发现如下函数:
void flush()刷新该流的缓冲
恍然大悟,数据应该还在缓冲区中,并未刷新到文件中。
解决方法
OutputStreamWriter 使用步骤如下:
-
创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称
-
使用·OutputStreamWriter对象中的方法write,把字符转为字节存储到缓冲区中(编码)
-
使用OutputStreamWriter对象中的方法flush,把内存中的字节刷新到文件中(使用字节流写字节的过程)
-
释放资源
完成实例为:
OutputStreamWriter outputStreamWriter = null;
try {
File filePath = new File(path);
if(!filePath.exists()) {
filePath.mkdirs();
}
String fileName = path + File.separatorChar + name;
File file = new File(fileName);
if (!file.exists()){
file.createNewFile();
}
FileOutputStream outputStream = new FileOutputStream(file);
if (outputStream != null){
outputStreamWriter = new OutputStreamWriter(outputStream, "utf-8");
outputStreamWriter.write(data);
outputStreamWriter.flush();
}
}
catch (IOException e) {
Log.e(TAG, "IOException: " + e);
}
finally {
try {
if (outputStreamWriter != null){
outputStreamWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
版权声明:本文为hnjzfwy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。