1

所以我制作了一个 txt 文件阅读器,该文件有一堆“长”行,因为它是一个素数查找程序,它将数字写入 txt。当我停止程序,然后重新启动它时,我希望它从停止的地方开始。这意味着我必须让它检查每一行并确保它正在读取某些内容,并且缓冲的阅读器被列为很长。这是代码:

try{
        FileReader fileReader = new FileReader(fileLocation);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        long stringRead = bufferedReader.read();

        while (stringRead != null)
        {
            stringRead = bufferedReader.read();
            currentNum =  stringRead;
        }

        bufferedReader.close();
        }
        catch(FileNotFoundException filenotfoundexxeption){
            System.out.print("file does not exist");
        }
        catch(IOException ioexception){
            ioexception.printStackTrace();
        }
}

所以问题是它不喜欢stringRead != null,否则我不知道该怎么做。我是菜鸟,所以请使用已经列出的代码回答。谢谢!

4

7 回答 7

3

你可能应该做

String line;
while ((line = bufferedReader.readLine()) != null)
{
    currentNum = Long.parseLong(line);
}

AsreadLine()将在到达文件末尾时返回 null。

于 2012-04-15T20:46:00.217 回答
2

Along是原始类型,因此不能是null. 另一方面, aLong是一个引用类型,所以它可以null.

无论哪种方式,BufferedReader#read()返回一个int表示单个字符,而不是整行。您应该#readLine()结合使用Long#parseLong()

考虑使用 aScanner代替,这将大大简化您的代码。

Scanner scanner = new Scanner(new File(fileLocation));

while (scanner.hasNextLong())
{
    currentNum = scanner.nextLong();
}
于 2012-04-15T20:43:41.030 回答
0

long 不能为 null,它要么为 0(未初始化,或已分配为 0),要么不为 0。您可能希望使用该readLine方法并将结果解析为 long using Long.parseLong(),而不是使用 读取每个字符read

于 2012-04-15T20:44:01.237 回答
0

long原始数据类型,不能为空。如果它没有初始化它的0. 但是,您可以使用Long包装类。例如Long stringRead = new Long(bufferedReader.read());. 但是,在您的情况下,情况永远不会如此,因为read()永远不会返回null,只要-1它是文件的结尾。所以你的支票应该是while(stringRead!=-1)

于 2012-04-15T20:46:04.357 回答
0

你每行一个号码?您必须阅读 with readLine,这将为您提供作为字符串的行。然后用Long.parseLong. 你可以检查你得到的字符串readLine不为空。

于 2012-04-15T20:47:41.843 回答
0

根据官方文档BufferedReader#read 返回 int。

读取的字符,为 0 到 65535 (0x00-0xffff) 范围内的整数,如果已到达流的末尾,则为 -1

这意味着您可以检查返回的是否不等于-1。

于 2012-04-15T20:47:54.383 回答
0

long 是一个原语,所以它不能为空,而且 BufferedReader.read 返回 int 所以你可以通过改变这一行来简单地让它工作

long stringRead = bufferedReader.read();

Integer stringRead = bufferedReader.read();

或者

 Long stringRead = new Long(bufferedReader.read());

Java 1.5 及更高版本自动将 int 包装为 Integer。

于 2012-04-15T20:52:20.200 回答