从.txt文件中读取度数符号与扫描仪

时间:2017-01-15 01:04:06

标签: java java.util.scanner

我为我的模拟器飞行编写了一个主程序。我在.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并删除度数符号时,程序输出所有行。

2 个答案:

答案 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”。

enter image description here

当我重新运行这个例子时。该应用程序能够成功读取每一行。希望这可以帮助。欢呼声。

答案 1 :(得分:0)

经过一段时间的使用,我想出了一个解决方案,无需重新将文件保存在UTF-8中,而是让程序读取了文件,然后在UTF-8中将其重新写入了自己的目录中并从目录中以UTF-8格式读取文件