Android FileOutputStream FileInputStream 读写问题记录

版权声明:本文出自Jinguangyue的博客,转载必须注明出处。 http://blog.csdn.net/coderyue https://blog.csdn.net/CoderYue/article/details/83026148

问题描述

在使用 FileOutputStream 和 FileInputStream 进行文件读写时发现大概率出现把文件清空的情况,非常费解!

文件的读取和写入代码大体如下:

try {
         input = new FileInputStream(dataFile);
         byte[] buffer = new byte[MOVE_BUFFER_LENGTH];
         int length;
         StringBuilder builder = new StringBuilder();
         while ((length = input.read(buffer)) != -1) {
             builder.append(new String(buffer, 0, length));
         }
         
         output = new FileOutputStream(dataFile);
         output.write("String".getBytes());
     } catch (Exception e) {
         e.getMessage();
     } finally {
         close(input);
         close(output);
     }

在这一段短短的代码中我一直没有认为有什么需要注意的地方,直到遇到了上面的问题, 注意: output = new FileOutputStream(dataFile); 这一段代码执行之后文件就已经被清空了, 即使你没有执行写入代码, 如果想不清空文件而在文件内容末尾写入可以加参数:output = new FileOutputStream(dataFile, true);

我遇到的问题是写入也执行了但是没有写入进去, 所以我确定是写入出了问题,原因就是我写入的字符串有中文, 读取的时候出现了乱码, 所以我在读取和写入的时候都加入编码从而解决了这个问题:

while ((length = input.read(buffer)) != -1) {
  	 builder.append(new String(buffer, 0, length, "GB18030"));
}

output.write(array.toString().getBytes("GB18030"));

解决这样一个问题竟然历时2天时间,话说一个人在职场中的能力就是解决问题的能力, 有的时候不是你技术了解的多问题就能解决的, 我发现分析方法也是非常的关键,比如我遇到这个问题, 我要写入的字符串差不多是这样的:[{"f" , "hehe???"}], 写入之后实际的文件内容是: [], 这说明内容还是有写入, 只是没有写入完全, 所以是写入的内容出了问题, 如果我一开始就从这个点去深入分析可能不会用到辣么长的时间。

在这期间小伙伴也劝我把这段方法注释掉算了, 期间我也犹豫过是否要这样做, 当我想这样做的时候我总觉得很别扭,这样做的方式不是很妥当,并没有从根本上解决问题, 其实类似这样的事件在我从毕业工作到现在遇到过很多, 刚开始我也是敷衍的解决bug,有问题的代码就注释掉, 容易出问题的地方为了项目不延期就catch住, 现在我觉得走了很多弯路, 人和人之间的巨大差别就是这样产生的, 从平时一点一滴的解决问题里面,我觉得我工作这几年技术上肯定是有提升的,但是我更喜欢这种做事方法和分析能力的提升,我相信这个bug能解决, 最后我就真的能解决, 不管用多久, 这个问题我要解决, 那这是遇到了问题了, 如果没有遇到那么多问题怎么办, 有句话不是说没有机会就创造机会, 不断的去实践, 不断的去解决问题, 不要让自己长时间闲着, 人一旦闲着,就废了。通过实践得到的成就会让你更兴奋和开心。

猜你喜欢

转载自blog.csdn.net/CoderYue/article/details/83026148