【问题标题】:Creating a ZipFile, needs to be initialised but initialisation needs exceptions handled创建 ZipFile,需要初始化,但初始化需要处理异常
【发布时间】:2016-12-05 12:19:34
【问题描述】:

所以我需要向程序添加一个新方法,它需要我访问这个 zip 文件夹。第一个方法从网站下载并返回一个 File 对象。

所以现在在我的方法中,我想将其更改为 ZipFile 对象。此刻我只想接收文件,使用该文件创建一个 ZipFile 对象,然后返回它。

所以一切都很好,但是当我创建 ZipFile 对象时,它说存在未处理的 IOException。但是,如果我将 try/catch 放在它周围,我将无法返回 ZipFile。所以我先创建它,然后尝试捕获,但告诉我 ZipFile 未初始化。关于我在这里的想法中缺少什么或如何对此进行排序的任何想法?

我的代码看起来像;

ZipFile zipTestData;

try {
    zipTestData = new ZipFile(testData)
}catch (IOException io)
    log.debug(io.toString());
}catch(Exception e) {
    log.debug(e.toString());
}

return zipTestData;

【问题讨论】:

  • 分享异常堆栈跟踪

标签: java file zipfile


【解决方案1】:

您不应该“吞下”异常。如果发生异常,您可能应该将其传递给调用者处理。否则,调用者怎么知道操作失败了?

如果调用者准备好正确处理结果,您也可以使用您描述的方法,如下所示:

ZipFile zipTestData = null;

try {
      zipTestData = new ZipFile(testData)
} catch (IOException io)
  log.debug(io.toString());
} catch(Exception e) {
  log.debug(e.toString());
}

return zipTestData;

如果由于某种原因无法创建 zip,这将向调用者返回 null 而不是 ZipFile

虽然,在那种特定的情况下,你也可以写

try {
      return new ZipFile(testData)
} catch (IOException io)
  log.debug(io.toString());
} catch(Exception e) {
  log.debug(e.toString());
}

return null;

您收到错误的原因是 local 变量在声明时默认初始化。因此,当您声明一个局部变量 (ZipFile zipTestData;) 时,它不会被分配任何值。然后,如果在运行时在new ZipFile(testData) 处引发异常,该变量将不会被分配并且return 将尝试返回该未分配变量的值。在 Java 中,这是被禁止的。

【讨论】:

    【解决方案2】:

    也许你应该初始化 ZipFile zipTestData = null; 如果没有堆栈跟踪,这就是我能想到的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 2022-12-15
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多