Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用扫描仪从.txt文件读取度符号_Java_Java.util.scanner - Fatal编程技术网

Java 使用扫描仪从.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

我正在为我的飞行模拟器写一个主程序。我收到一个.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;
}

注意,当有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());