【问题标题】:null pointer exception in writing file in java在java中写入文件时出现空指针异常
【发布时间】:2014-10-28 23:16:56
【问题描述】:

我在写入文件时遇到异常。我在下面给出代码。

private static void readCsvFromFileAmazon(List<String> filelist) 
        throws BiffException, IOException,NullPointerException {

    FileWriter fw = new FileWriter("total_number_of_products_amazon.txt", true);
    String numberOfProducts = getProductNumber(url);

    System.out.println(category);
    System.out.println("@@@@@@@@@@@@@@" + numberOfProducts);
    // call function to get the number of products. \
    if (!numberOfProducts.equals(null) || !numberOfProducts.equals(" "))
    {
        fw.write(numberOfProducts);
    }
    else
    {
        System.out.println("cant write null product");
    }
    fw.close();
}

获取产品数量的值为空,然后发生异常

Exception in thread "main" 
@@@@@@@@@@@@@@null
java.lang.NullPointerException

这一行发生异常

if(!numberOfProducts.equals(null)||!numberOfProducts.equals(" "))

【问题讨论】:

  • 到底在哪里使用equals()比较字符串与null
  • 你的getProductNumber(url) 有什么回报吗?
  • 就像错误中提到的那样:numberOfProducts 在此处从 getProductNumber() 返回为 null
  • 我发现这个 .equals 在互联网的某个地方检查并尝试..okk 现在我解决了异常谢谢

标签: java file-io filewriter


【解决方案1】:

您必须以不同的方式检查 numberOfProducts 内容:

if(null != numberOfProducts ||!"".equals(numberOfProducts))

而不是if(!numberOfProducts.equals(null)||!numberOfProducts.equals(" "))

因为如果numberOfProductsnull,那么在null 对象上调用方法equals 会抛出nullPointerException

希望对你有帮助,

【讨论】:

    【解决方案2】:

    在你的 if 语句中 numberOfProducts.equals(null)

    您正在将字符串与null 字符串进行比较。这没有任何效果,因为您正在比较一个空对象。

    记住String是一个对象,你需要检查对象是null这种方式numberOfProducts == null还是numberOfProducts != null

    【讨论】:

      【解决方案3】:

      您无法检查 null.equals(null) 是否 - 它会抛出异常 NullPointerException,用于绑定访问 nullequals() 方法。首先,确保numberOfProducts 本身不是null,使用== 运算符:

      if (numberOfProducts == null) { 
         //do something
      } else {
       ...
      }
      

      还要注意这一行

      if(!numberOfProducts.equals(null)||!numberOfProducts.equals(" "))
      

      逻辑上没有意义。假设 null.equals(null) 可以工作(它不工作),第二个(右)操作数 - !numberOfProducts.equals(" "),只有在 numberOfProducts == null 时才会被评估,所以无论何时评估正确的操作数 - 它总是会产生 false

      这意味着您的条件可以简化为:

      if (numberOfProducts != null) 
      

      【讨论】:

        【解决方案4】:

        正如您发布的:

        System.out.println("@@@@@@@@@@@@@@"+numberOfProducts);
        

        输出是:

        @@@@@@@@@@@@@@null
        

        这意味着numberOfProductsnull,因此如果您尝试像这样对其调用任何非静态方法:

        numberOfProducts.equals(null)
        

        会抛出一个NullPointerException。如果你想检查它是否是null,这样做

        if (numberOfProducts != null && !numberOfProducts.equals(" ")) {
            fw.write(numberOfProducts);
        }
        

        【讨论】:

          【解决方案5】:

          我认为这会奏效

          if(numberOfProducts!=null && !numberOfProducts.rquals(" ")){
           //doSomething
          }else{
           //doSomethingElse
          }
          

          【讨论】:

          • 它有不同的逻辑(这可能是 OP 真正想要的)
          • 是的,我也同意。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-01
          • 1970-01-01
          • 2020-03-19
          • 2015-08-23
          • 2023-03-18
          相关资源
          最近更新 更多