问题描述
使用DataInputStream读取指定文件的输入流,然后再使用JSONValue.parse,理论上会得到一个JSONArray,然而在我修改过txt文件的内容并保存替换原文件后,再执行就无法得到理论上的JSONArray
相关代码
String filepath = "/sdcard/test.txt";
File tFile = new File(filepath);
byte[] tByte = new byte[(int)tFile.length()];
DataInputStream in = new DataInputStream(new FileInputStream(filepath));
in.readFully(tByte);
String str = new String(tByte, "utf-8");
Object strObj = JSONValue.parse(str);
JSONArray strArr = strObj instanceof JSONArray ? (JSONArray) strObj : new JSONArray();
文件内容
[{
"userId": "10000001",
"name": "张明",
"sex": "男"
},
{
"userId": "10000002",
"name": "西瓜",
"sex": "女"}
]
尝试方法1
经过debug发现,指定文件的输入流转换成string后,带有\n和\t,所以我使用了replace方法,然而结果还是错误的
尝试方法2
卸载app,删除app工作根目录,重新跑一遍,结果还是错误
解决方法
所谓解铃还须系铃人,从哪里出错就从哪里解决,这个问题出现的原因就是我修改了txt文件内容,所以我去找到了原来没改过的源文件,再次执行,发现一点问题没有。到此,我发现,果然问题出在了txt文件中,此时,使用diffmerge工具,对比修改后的文件和之前的源文件区别,发现修改后的文件的中文都是乱码
后来搜到了一篇文章,UTF8最好不要带BOM,附许多经典评论,这篇文章中提到UTF8不要带BOM,而且BOM是微软的习惯,使用记事本编辑文本,保存后就会自动保存为带BOM的UTF8编码格式,那怎么办呢,以后再修改txt文件就不要用记事本了,使用工具软件editPlus或者notepad++,保存为不带BOM的UTF格式即可