问题描述

在使用 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能解决, 最后我就真的能解决, 不管用多久, 这个问题我要解决, 那这是遇到了问题了, 如果没有遇到那么多问题怎么办, 有句话不是说没有机会就创造机会, 不断的去实践, 不断的去解决问题, 不要让自己长时间闲着, 人一旦闲着,就废了。通过实践得到的成就会让你更兴奋和开心。

关注我的 Google Play 独立开发公众号
通过从零到一在 Google Play 开发出下载量 300万 APP 的经历,我将把很多精彩的故事分享到公众号,扫描下方二维码和我一起开发 APP 赚美元吧!

Android FileOutputStream FileInputStream 读写问题记录相关推荐

  1. Android data目录读写文件

    1.如果向/data/data/Package name/目录下写文件要在AndroidManifest.xml里加入如下句 <uses-permission android:name=&quo ...

  2. android文件读写操作布局文件代码,android实现文件读写功能

    本文实例为大家分享了android实现文件读写功能的具体代码,供大家参考,具体内容如下 读取: public static String _getJsonString(String fileName) ...

  3. 内容提供者ContentProvider, 读写加联系人,读写通话记录,监听收到的短信,获取之前已经收到的短信

    1.什么是内容提供者? 首先我们必须要明白的是ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用比较少.ContentProvider为不同的软 ...

  4. 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录

    2019独角兽企业重金招聘Python工程师标准>>> 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录 来源:微信技术团队的公众号WeMobileDev 热 ...

  5. 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  6. 使用RootTools实现对Android系统文件的读写

    使用RootTools实现对Android系统文件的读写  作者:          蒋东国  时间:     2016年11月2日 星期三  应用来源:     hqt APP(测试机型:华为荣耀4 ...

  7. 2021-06-07 RK3328 Android 10 上调试es7243记录

                  RK3328 Android 10 上调调试es7243记录 一.es7243电路图. 二.修改的部分,解决没有mclk的问题. commit b86b0275bf898f ...

  8. Android nfc模块读写MifareClassic卡50

     http://3y.uu456.com/bp_8mhvy4gizz721et5ih0i_1.html 一般来说,基于MifareClassic的射频卡:1K:16个分区(sector),每个分区 ...

  9. Android RIL 调试分析全记录 No APN found for carrier

    Android RIL 调试分析全记录 以前没有调试过RIL的东西, 从零开始, 花了两周时间,终于拨号成功,这里发表出来与大家共享经验,少走弯路. 上一篇文章是一个成功拨号的Android RIL ...

  10. Android中联系人和通话记录详解(2)

    在文章Android中联系人和通话记录详解(1)中对通话记录进行了分析,本章将对联系人的数据库表.字段以及Insert,Query,Delelte,Update四大基本数据操作进行分析. 与联系人相关 ...

最新文章

  1. Python的f-strings格式化
  2. 金融风控实战——不均衡学习
  3. 向代码节添加代码编程实现
  4. php抽象的案例,php抽象类和抽象方法的例子
  5. NopCommerce 4.2的安装与运行
  6. Python | threading04 - 使用信号量,实现线程间同步
  7. RANSAC算法拟合平面实现
  8. win10应用程序模糊处理
  9. C# 本地图片转Base64码和Base64码显示
  10. 如何用vba做答题、抽点类ppt
  11. CPU与CUDA(GPU)的计算能力对比之二: Keras Resnet 运算效率比较
  12. 计算机二级考试没过能重考吗,计算机二级能重复考吗
  13. 古之成大事者必经三境界--王国维《人间词话》
  14. 唐骏离职新华都当老板
  15. QQ2011 Beta3优先体验(附官方体验地址及下载地址)
  16. 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像
  17. VMware NSX-T Data Center 3.2.3 防火墙下载及安装部署
  18. 深黑黑板风格感恩节主题介绍PPT模板
  19. zzcms v8.3
  20. Android12 多屏多用户

热门文章

  1. dtu连接虚拟服务器,DTU连接HTTP网页
  2. java类库编程_进阶Java编程(5)基础类库
  3. 怎么写Scholarship Essay?
  4. 关于无线传感器网络(WSN)的学术会议和期刊
  5. 磁盘属性显示为RAW的SD卡CF卡U盘和硬盘怎么办?
  6. 煤炭及煤化工加工会产生什么危废_煤化工固体废物的清洁处置
  7. 规则三度体磁力异常 matlab,三维强磁性体的勘探方法及勘探系统与流程
  8. 微信该服务器已饱满,微信故障背后:用户91pron过亿后的小故障有大影响
  9. Status Register ST1 状态寄存器 (28335)
  10. 希尔伯特:数学世界的亚历山大(2009-06-11 21:33:43)