我如何将Long变量与null进行比较

时间:2012-04-15 20:41:41

标签: java long-integer primes bufferedreader filereader

所以我正在制作一个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,我不知道该怎么做。我是一个菜鸟,所以请使用已经列出的代码回答。谢谢!

7 个答案:

答案 0 :(得分:3)

你可能应该这样做

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

当到达文件末尾时,readLine()将返回null。

答案 1 :(得分:2)

long是基本类型,因此它不能是null。另一方面,Long是引用类型,因此可以null

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

考虑使用Scanner代替,这将显着简化您的代码。

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

while (scanner.hasNextLong())
{
    currentNum = scanner.nextLong();
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

每行有一个号码?你必须阅读readLine,这将给你一个字符串行。然后用Long.parseLong解析。您可以检查从readLine获得的字符串是否为空。

答案 5 :(得分:0)

根据the official documentation BufferedReader #read返回int。

  

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

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

答案 6 :(得分:0)

long是一个原语,因此它不能为null,并且BufferedReader.read返回int,因此您可以通过更改此行简单地使其工作

long stringRead = bufferedReader.read();

Integer stringRead = bufferedReader.read();

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

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