Java:读取文件,第一行丢失

Java:读取文件,第一行丢失,第1张

概述我有一个HashMap<String,String>它保留了图像的文件名和显示名称.我逐行读取文件,并将键和值添加到HashMap.BufferedReaderreader;Stringline;String[]lineSplit;HashMap<String,String>imenaZnaki=newHashMap<String,String>();try{reader=newBuffered

我有一个HashMap< String,String>它保留了图像的文件名和显示名称.我逐行读取文件,并将键和值添加到HashMap.

BufferedReader reader;String line;String[] linesplit;HashMap<String, String> imenaZnaki = new HashMap<String, String>();try {    reader = new BufferedReader(new inputStreamReader(am.open("znaki_imena.txt"), "UTF-8"));    line = reader.readline();    while (line != null) {        linesplit = line.split("->");        imenaZnaki.put(linesplit[0], linesplit[1]);        line = reader.readline();    }    reader.close();} catch (IOException e) {    e.printstacktrace();}

一切都按预期工作,除了第一个添加的条目,.get(key)返回null,而.containsKey(key)返回false.所有其他键/值都可以正常存储在HashMap中.

编辑:

这根本没有意义……在我将内容添加到HashMap之后,我运行了MagicMan提供的代码来检查所有的命令是否都在HashMap中

for(String key: imenaZnaki.keySet()) {    System.out.println("KEY: " + key + "  VALUE: " + imenaZnaki.get(key));}

如果我按CTRL F为“nevar_andrej”,它会显示4个输出,这是正确的.但是如果我搜索“nevar_andrej”(带有空格),它只会显示其中的3个,这是错误的,因为第一个会丢失.所以我的猜测是,文件的第一行中有一些东西会引起混淆.所以我添加了假/假第一行(bla_bla-> Bla bla)并且它可以工作,但这是一个讨厌的解决方法.

这是我的全文文件,使用UTF-8 http://pastebin.com/6A4r4jm6编码

解决方法:

尝试运行下面的代码,看看是否所有条目都存在:

for(String key: imenaZnaki.keySet()) {        System.out.println("KEY: " + key + "  VALUE: " + imenaZnaki.get(key));}

我能够运行你的代码和你的样本,并在那里d出所有7个条目.如果不能正常使用,请参阅antIDuh的评论;您可能遇到了在get()调用中使用的字符串的编码问题.

这是从OS X运行的,

控制台输出指定UTF-8作为格式:

KEY: nevar_andrejev_kriz_zelezniska_proga_je_dvo_ali_vectirna  VALUE: Andrejev kri? (?elezni?ka proga je dvo ali ve?tirna)KEY: nevar_andrejev_kriz_zelezniska_proga_je_dvo_ali_vectirna_2  VALUE: Andrejev kri? (?elezni?ka proga je dvo ali ve?tirna)KEY: nevar_andrejev_kriz_zelezniska_proga_je_enotirna  VALUE: Andrejev kri? (?elezni?ka proga je enotirna)KEY: nevar_andrejev_kriz_zelezniska_proga_je_enotirna_2  VALUE: Andrejev kri? (?elezni?ka proga je enotirna)KEY: nevar_blizina_letaliske_steze  VALUE: Bli?ina letali?ke stezeKEY: nevar_blizina_obale  VALUE: Bli?ina obaleKEY: nevar_blizina_svetlobnih_prometnih_znakov  VALUE: Bli?ina svetlobnih prometnih znakov

UPDATE

因此,这似乎是正在阅读BOM(http://en.wikipedia.org/wiki/Byte_order_mark)的问题.我最初将文件重新保存为UTF-8,并生成上面的输出.然后我使用编码“UTF-8 with BOM”重新保存文件,它产生了这个:

KEY: ???nevar_andrejev_kriz_zelezniska_proga_je_dvo_ali_vectirna  VALUE: Andrejev kri?? (??elezni??ka proga je dvo ali ve??tirna)KEY: nevar_andrejev_kriz_zelezniska_proga_je_dvo_ali_vectirna_2  VALUE: Andrejev kri?? (??elezni??ka proga je dvo ali ve??tirna)KEY: nevar_andrejev_kriz_zelezniska_proga_je_enotirna  VALUE: Andrejev kri?? (??elezni??ka proga je enotirna)KEY: nevar_andrejev_kriz_zelezniska_proga_je_enotirna_2  VALUE: Andrejev kri?? (??elezni??ka proga je enotirna)KEY: nevar_blizina_letaliske_steze  VALUE: Bli??ina letali??ke stezeKEY: nevar_blizina_obale  VALUE: Bli??ina obaleKEY: nevar_blizina_svetlobnih_prometnih_znakov  VALUE: Bli??ina svetlobnih prometnih znakov

注意三个?第一行前面的字符.那些BOM字符在十六进制中看起来像这样:EF BB BF.这可能是导致第一行问题的原因.尝试使用文本编辑器(如Notepad或SublimeText)重新保存没有BOM的文件

总结

以上是内存溢出为你收集整理的Java:读取文件,第一行丢失全部内容,希望文章能够帮你解决Java:读取文件,第一行丢失所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存