Java 使用扫描仪从.txt文件读取度符号
我正在为我的飞行模拟器写一个主程序。我收到一个.txt文件中的简报,我正试图用扫描仪读取该文件。txt文件包含一个度符号,这会导致扫描仪无法读取整个文件Java 使用扫描仪从.txt文件读取度符号,java,java.util.scanner,Java,Java.util.scanner,我正在为我的飞行模拟器写一个主程序。我收到一个.txt文件中的简报,我正试图用扫描仪读取该文件。txt文件包含一个度符号,这会导致扫描仪无法读取整个文件 public static String[] ConvertFile(String FileName){ ArrayList<String> FileArray = new ArrayList<String>(); int count = 0; try{ Scanner fi
public static String[] ConvertFile(String FileName){
ArrayList<String> FileArray = new ArrayList<String>();
int count = 0;
try{
Scanner file = new Scanner( new File ("C:\ <File Location>" + FileName));
while(file.hasNextLine()){
count++;
String Line = file.nextLine());
System.out.printf("%3d: %s %n", count, Line );
System.out.println(count);
}
}
catch(FileNotFoundException fnfe){
System.out.println("File Not Found.");
}
return null;
}
注意,当有726行时,输出给出txt文件的前16行。我知道它是度符号,因为当我编辑txt并删除度符号时,程序会输出所有行。这是一个有趣的行为。我试着运行你的示例,得到了相同的结果,除了我,如果我在文件的第5行有一个学位符号,程序甚至不想显示前4行。这背后的确切原因与字符编码有关,与对此有深入了解的人一起找到详细的解释将是一件有趣的事情 经过深入研究,发现Java的
扫描器
使用了底层平台的默认字符集。您可以使用以下代码找出默认字符集:
System.out.println(java.nio.charset.Charset.defaultCharset());
在我的系统上,显示的消息是“UTF-8”。我目前使用的是Windows10系统,我创建的文本文件的默认字符编码为“ANSI”。我建议确保扫描仪使用的字符编码与文本文件的字符编码相同
使用Window的记事本应用程序,我能够将字符编码从ANSI更改为UTF-8。只需单击“文件”,然后单击“另存为…”,当对话框弹出时,确保在“编码”框底部选择“UTF-8”
当我重新运行这个示例时。应用程序能够成功地读取每一行。希望这有帮助。干杯。玩了一段时间后,我想出了一个解决方案,不必在UTF-8中重新保存文件,就是让程序读取文件,然后在自己的目录中重新写入UTF-8,并从UTF-8格式的目录中读取文件,因此它会因为度符号而崩溃?当到达该符号时会发生什么?它是否崩溃,file.hasNextLine()
是否开始返回false
?在此之前是否还有其他度数符号被读取,或者这是第一个?它不会崩溃。它打印txt文件的前16行,但有726行。对不起,我不清楚。我知道这是问题所在,因为当我编辑txt文件并删除符号时,扫描仪能够打印所有行。文件对这个非ASCII字符(以及其他字符)使用什么“字符集”(编码)?这是JVM的默认字符集吗?Scanner的1-arg ctor使用它?如果没有,请使用2-arg ctor指定正确的字符集。我要尝试的第一件事是删除它卡住的第16行,看看它是否更进一步,或者16是否是它将执行的最大值。感谢您的帮助。我需要记住用UTF-8编码保存我的txt文件。
System.out.println(java.nio.charset.Charset.defaultCharset());