上周末的时候。朋友约好去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:
<code>public void output(String filePath) throws FileNotFoundException{</code>
<code>Scanner scanner=new Scanner(new File(filePath));</code>
<code>String str=null;</code>
<code>while(scanner.hasNextLine()){</code>
<code>str=scanner.nextLine();</code>
<code>if(str.indexOf("FileName")>0){</code>
<code>System.out.println(str.substring(str.indexOf(">")+1, str.lastIndexOf("<")));</code>
<code>}</code>
<code>scanner.close();</code>
File content:
<code><File></code>
<code><MediaFileType>0</MediaFileType></code>
<code><FileName>周杰伦 - 爱在西元前.mp3</FileName></code>
<code><FilePath>D:\music\</FilePath></code>
<code><FileSize>5623610</FileSize></code>
<code><Duration>234292</Duration></code>
<code><Hash>0589341ba15528a4c63e36c49a3c0e45</Hash></code>
<code><Lyric>E:\KuGou\Lyric\周杰伦 - 爱在西元前-0589341ba15528a4c63e36c49a3c0e45.krc</Lyric></code>
<code><Bitrate>192004</Bitrate></code>
<code><MandatoryBitrate>0</MandatoryBitrate></code>
<code></File></code>
Java Code after modify:
<code>Scanner scanner=new Scanner(new File(filePath),"UTF-8");//Always explicitly pass a charset when working with text</code>
<code>if(str.indexOf("FileName")>0)</code>
<code>//It's better to check IOException when working with Scanner(PS:find UnmappableCharacterException took me more time,finally by debug to found )</code>
<code>IOException ioException = scanner.ioException();</code>
<code>if (ioException != null) {</code>
<code>ioException.printStackTrace();</code>
<code></code>