Java 如果最后一行为空,扫描仪无法捕获最后一个换行符

Java 如果最后一行为空,扫描仪无法捕获最后一个换行符,java,Java,我正在学习一门编程课,我们必须用哈夫曼树压缩一个文件并解压缩它 我遇到了一个问题,无法捕获txt文件的最后一个换行符。 例如 因此,如果我在一个文件中压缩和解压上面的文本,我将得到一个包含以下内容的文件 This is a line This is a secondline 现在我正在做 while(Scanner.hasNextLine()){ char[] cArr = file.nextLine().toCharArray(); //count amount of

我正在学习一门编程课,我们必须用哈夫曼树压缩一个文件并解压缩它

我遇到了一个问题,无法捕获txt文件的最后一个换行符。 例如

因此,如果我在一个文件中压缩和解压上面的文本,我将得到一个包含以下内容的文件

This is a line  
This is a secondline
现在我正在做

while(Scanner.hasNextLine()){ 
    char[] cArr = file.nextLine().toCharArray();
    //count amount of times a character appears with a hashmap
    if(file.hasNextLine()){
        //add an occurrence of \n to the hashmap
    }
}
我知道问题是最后一行技术上没有“Scanner.hasNextline()”,因为我刚刚通过nextLine()调用使用了文件的最后一个“\n”。
当我意识到我已经尝试用useDelimiter(“”)和Scanner.next()代替Scanner.nextLine()时,这两种方法仍然会导致类似的问题

有没有办法解决这个问题?

提前感谢。

不要完全更改代码或方法,使用似乎很有效

File testfile = new File("test.txt");
StringBuilder stringBuffer = new StringBuilder();
try{
    BufferedReader reader =  new BufferedReader(new FileReader(testfile));
    char[] buff = new char[500];
    for (int charsRead; (charsRead = reader.read(buff)) != -1; ) {
        stringBuffer.append(buff, 0, charsRead);
    }
}
catch(Exception e){
    System.out.print(e);
}
System.out.println(stringBuffer);
正在检查读取的总字节数:

System.out.println(stringBuffer.length()); // 51
文件大小列表:

ls -l .
51 test.txt

字节读取匹配,因此它得到包含空白行的所有行。

注意:我使用Java6,修改以适合您的版本


希望这能有所帮助。

我想不出使用扫描仪的方法。尝试另一种读取文件的方法。这里有一个好帖子:
ls -l .
51 test.txt