• Scanner遇上UnmappableCharacterException


    上周末的时候。朋友约好去KTV,鉴于我这样的不怎么听歌的孩子伤不起啊,灵机一动就把我的酷狗歌单导出来了,XML文件嘛,内容太多,我仅仅想要歌名足已。

    于是写了一个java去输出歌名。

        岂料我受到了挫伤,scanner.hasNextLine()一直为false,于是我百思不得姐啊,经过调试发现,Scanner内部有java.nio.charset.UnmappableCharacterException,就百度了一下,没找到答案。google訪问不了。想起公司的网络是香港的,就远程上去,还好在stackoverflow上找到了答案。O(∩_∩)O~~
      原来用修改以下一行就OK啦,不解释,你懂的。不懂就去stackoverflow。
        Scanner scanner=new Scanner(new File(filePath),"UTF-8");
    URL:http://stackoverflow.com/questions/19252321/findwithinhorizon-fails-to-match (这个页面上你能够学到很多其它) 

    Java Code:        
    1. public void output(String filePath) throws FileNotFoundException{
    2. Scanner scanner=new Scanner(new File(filePath));
    3. String str=null;
    4. while(scanner.hasNextLine()){
    5. str=scanner.nextLine();
    6. if(str.indexOf("FileName")>0){
    7. System.out.println(str.substring(str.indexOf(">")+1, str.lastIndexOf("<")));
    8. }
    9. }
    10. scanner.close();
    11. }
    File content:
    1. <File>
    2. <MediaFileType>0</MediaFileType>
    3. <FileName>周杰伦 - 爱在西元前.mp3</FileName>
    4. <FilePath>D:music</FilePath>
    5. <FileSize>5623610</FileSize>
    6. <Duration>234292</Duration>
    7. <Hash>0589341ba15528a4c63e36c49a3c0e45</Hash>
    8. <Lyric>E:KuGouLyric周杰伦 - 爱在西元前-0589341ba15528a4c63e36c49a3c0e45.krc</Lyric>
    9. <Bitrate>192004</Bitrate>
    10. <MandatoryBitrate>0</MandatoryBitrate>
    11. </File>
    Java Code after modify:
    1. public void output(String filePath) throws FileNotFoundException{
    2. Scanner scanner=new Scanner(new File(filePath),"UTF-8");//Always explicitly pass a charset when working with text
    3. String str=null;
    4. while(scanner.hasNextLine()){
    5. str=scanner.nextLine();
    6. if(str.indexOf("FileName")>0)
    7. System.out.println(str.substring(str.indexOf(">")+1, str.lastIndexOf("<")));
    8. }
    9. //It's better to check IOException when working with Scanner(PS:find UnmappableCharacterException took me more time,finally by debug to found )
    10. IOException ioException = scanner.ioException();
    11. if (ioException != null) {
    12. ioException.printStackTrace();
    13. }
    14. scanner.close();
    15. }
  • 相关阅读:
    javascript判断触发事件event的鼠标按钮
    解决IE8 Session共享问题
    SignalR 实现web浏览器客户端与服务端的推送功能
    MFC ActiveX控件与ATL ActiveX控件的比较 .
    rpm relevent operation record
    通过rpm包安装、配置及卸载mysql的详细过程 Richard Shen 运维/架构 51CTO技术博客
    instal python relevent cmds
    ubuntu日志的设置
    关于电信、网通检测ADSL共享上网的技术手段
    Simple usage of Python's logging module
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6830986.html
Copyright © 2020-2023  润新知