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