我为我的模拟器飞行编写了一个主程序。我在.txt文件中收到简报,我试图用扫描仪读取文件。 .txt文件包含一个度数符号,这会导致扫描程序不读取整个文件。
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;
}
我把线放在下面的任务中(第23行)
COND: 140475 LB // RWY DRY // +14°C Q1021 270/09 // LMT: OBS(B)
请注意,当有726行时,输出会给出txt文件的前16行。我知道它的度数符号,因为当我编辑txt并删除度数符号时,程序输出所有行。
答案 0 :(得分:1)
这是一个有趣的行为。我尝试运行你的例子,我得到了相同的结果,除了我,如果我的文件的第5行有一个度数符号,程序甚至不想显示前4行。这背后的确切原因与字符编码有关,找到详细解释与有洞察力的人会很有趣。
经过一番挖掘后,事实证明Java的Scanner
使用底层平台的默认字符集。您可以使用以下代码找出您的默认字符集:
System.out.println(java.nio.charset.Charset.defaultCharset());
在我的系统上,显示的消息是“UTF-8”。我目前正在使用Windows 10系统,我创建的文本文件的默认字符编码为“ANSI”。我建议您确保Scanner
正在使用的字符编码和文本文件的字符编码是相同的。
使用Window的记事本应用程序,我能够将字符编码从ANSI更改为UTF-8。只需单击“文件”,然后单击“另存为...”,弹出对话框时,请确保在“编码”框中选择“UTF-8”。
当我重新运行这个例子时。该应用程序能够成功读取每一行。希望这可以帮助。欢呼声。
答案 1 :(得分:0)
经过一段时间的使用,我想出了一个解决方案,无需重新将文件保存在UTF-8中,而是让程序读取了文件,然后在UTF-8中将其重新写入了自己的目录中并从目录中以UTF-8格式读取文件