java中scanner读取文件编码及noSuchElementException


在本地需要给客户演示从postgresql数据导入elasticsearch当中,在idea当中写了一个程序read3.java,用scanner读取文件内容没有问题,

但是这个read3.java只用来把表格导出的json 文件转化为可以导入es的有效的json文件,并没有加入需要下载的依赖,但是我每次运行都要在idea当中进行,

所以我直接找到read3.java的目标路径,然后复制到桌面上。

在桌面上直接用 javac编译出一个.class文件然后就开始运行。

每次都出现一个报错,就是  

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)

......

然后我重新打开记事本创建一个abc.json文件,保存编码格式为"utf-8",然后用 read3去读这个文件,读出来是乱码,

于是我想到scanner的读入字符的编码存在问题,在创建scannner时,指定编码,即,Scanner sc=new Scanner(new FIle("xxx"),"utf-8"));

然后去用notepad++打开需要读入的文件,发现文件编码是 utf-8 bom,遂转换编码格式为 utf-8,重新运行。问题解决了。