Android FileOutputStream FileInputStream 读写问题记录
问题描述
在使用 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 读写问题记录相关推荐
- Android data目录读写文件
1.如果向/data/data/Package name/目录下写文件要在AndroidManifest.xml里加入如下句 <uses-permission android:name=&quo ...
- android文件读写操作布局文件代码,android实现文件读写功能
本文实例为大家分享了android实现文件读写功能的具体代码,供大家参考,具体内容如下 读取: public static String _getJsonString(String fileName) ...
- 内容提供者ContentProvider, 读写加联系人,读写通话记录,监听收到的短信,获取之前已经收到的短信
1.什么是内容提供者? 首先我们必须要明白的是ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用比较少.ContentProvider为不同的软 ...
- 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录
2019独角兽企业重金招聘Python工程师标准>>> 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录 来源:微信技术团队的公众号WeMobileDev 热 ...
- 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析
我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...
- 使用RootTools实现对Android系统文件的读写
使用RootTools实现对Android系统文件的读写 作者: 蒋东国 时间: 2016年11月2日 星期三 应用来源: hqt APP(测试机型:华为荣耀4 ...
- 2021-06-07 RK3328 Android 10 上调试es7243记录
RK3328 Android 10 上调调试es7243记录 一.es7243电路图. 二.修改的部分,解决没有mclk的问题. commit b86b0275bf898f ...
- Android nfc模块读写MifareClassic卡50
http://3y.uu456.com/bp_8mhvy4gizz721et5ih0i_1.html 一般来说,基于MifareClassic的射频卡:1K:16个分区(sector),每个分区 ...
- Android RIL 调试分析全记录 No APN found for carrier
Android RIL 调试分析全记录 以前没有调试过RIL的东西, 从零开始, 花了两周时间,终于拨号成功,这里发表出来与大家共享经验,少走弯路. 上一篇文章是一个成功拨号的Android RIL ...
- Android中联系人和通话记录详解(2)
在文章Android中联系人和通话记录详解(1)中对通话记录进行了分析,本章将对联系人的数据库表.字段以及Insert,Query,Delelte,Update四大基本数据操作进行分析. 与联系人相关 ...
最新文章
- Python的f-strings格式化
- 金融风控实战——不均衡学习
- 向代码节添加代码编程实现
- php抽象的案例,php抽象类和抽象方法的例子
- NopCommerce 4.2的安装与运行
- Python | threading04 - 使用信号量,实现线程间同步
- RANSAC算法拟合平面实现
- win10应用程序模糊处理
- C# 本地图片转Base64码和Base64码显示
- 如何用vba做答题、抽点类ppt
- CPU与CUDA(GPU)的计算能力对比之二: Keras Resnet 运算效率比较
- 计算机二级考试没过能重考吗,计算机二级能重复考吗
- 古之成大事者必经三境界--王国维《人间词话》
- 唐骏离职新华都当老板
- QQ2011 Beta3优先体验(附官方体验地址及下载地址)
- 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像
- VMware NSX-T Data Center 3.2.3 防火墙下载及安装部署
- 深黑黑板风格感恩节主题介绍PPT模板
- zzcms v8.3
- Android12 多屏多用户
热门文章
- dtu连接虚拟服务器,DTU连接HTTP网页
- java类库编程_进阶Java编程(5)基础类库
- 怎么写Scholarship Essay?
- 关于无线传感器网络(WSN)的学术会议和期刊
- 磁盘属性显示为RAW的SD卡CF卡U盘和硬盘怎么办?
- 煤炭及煤化工加工会产生什么危废_煤化工固体废物的清洁处置
- 规则三度体磁力异常 matlab,三维强磁性体的勘探方法及勘探系统与流程
- 微信该服务器已饱满,微信故障背后:用户91pron过亿后的小故障有大影响
- Status Register ST1 状态寄存器 (28335)
- 希尔伯特:数学世界的亚历山大(2009-06-11 21:33:43)