【问题标题】:BufferedOutputStream instance returning null in Spring Boot application在 Spring Boot 应用程序中返回 null 的 BufferedOutputStream 实例
【发布时间】:2017-11-11 12:35:06
【问题描述】:

我在 Amazon EC2 实例 (Ubuntu) 上运行的 Spring Boot 应用程序中编写了以下代码:

String userFile = "myfile.txt";
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(userFile));

它在我的本地主机上运行良好,但是当我将 .jar 部署到产品服务器(如上所述)时,streamnulluserFile 是有效的文件路径。有什么正当理由吗?与服务器空间或权限有关?与服务器配置文件有关吗?(application.yml 在我的情况下)

【问题讨论】:

  • stream 不能返回 null,因为它不是函数。你的意思是stream null,所以值null?在构造函数调用之后,如果没有忽略异常的 try-catch 块,这将是不可能的。
  • 是的,stream 不能是 null。即使是权限或驱动器空间问题,您也会遇到异常。也许您正在其他地方吞下异常。你能告诉我们一个完整的方法吗?
  • 您已经捕获并忽略了一个异常,而是返回了 null。有什么例外?答案就是您的问题的答案。
  • 叹息。有一个prior 异常,阻止了对stream 的分配,因此它保持为空。 那个例外是什么? 这就是您问题的全部答案。当您在这里提出问题时,您应该始终发布所有相关代码。现在就做。
  • 无论如何-问题不完整。 @Perry,您的代码 必须 包含发生 NullPointerException 的行。并解决您的问题:将您的 finally 块调整为 only 关闭流,当它不为空时。然后您将看到原始异常(如果您没有在任何地方忽略它)。

标签: java spring spring-boot amazon-ec2 stream


【解决方案1】:

myfile.txt 是否存在?如果没有,我会期待某种问题。尝试添加

userFile.createNewFile();

如果无法完成会抛出一些异常。

【讨论】:

  • 完全是浪费时间。 new FileOutputStream() 已经创建了文件。现在它必须先删除这个。你还没有发现真正的问题。
  • API 不保证会创建文件。顺便说一句,我用一个你从未回答过的问题回答了你的问题。
  • new FileOutputStream() 确实 完全保证,除非有异常,或者除非您指定“附加”模式并且文件已经存在。试图事后猜测它仍然毫无意义。我不知道你的最后一句话是指什么。
  • @Steve11235 是的,myfile.txt 确实存在。
  • 只是为了澄清。在 Java 8 API 中,“文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。文件是否可用或是否可以创建取决于底层平台。特别是某些平台允许一次只能由一个 FileOutputStream(或其他文件写入对象)打开以写入的文件。在这种情况下,如果所涉及的文件已经打开,则此类中的构造函数将失败。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2019-04-02
相关资源
最近更新 更多