【问题标题】:Java FileOutputStream Windows/LinuxJava FileOutputStream Windows/Linux
【发布时间】:2015-03-06 17:58:38
【问题描述】:

我得到了这个代码:

OutputStream output = new FileOutputStream("res/" + new java.util.Date().toString() +".properties");

我正在大学(笔记本电脑 - Ubunutu)和家里(桌面 - Windows)编写我的代码。 我将 Eclipse 项目与 github 和 EGit 同步。

现在我无法在我的 Windows 机器上执行这行代码,但它仍然可以在我的笔记本电脑上运行..完全相同的代码..

得到错误: java.io.FileNotFoundException: res\Thu Jan 08 15:54:39 CET 2015.properties (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)

还有:at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(Unknown Sourc at java.io.FileOutputStream.<init>(Unknown Source)

【问题讨论】:

  • 我认为在 unix 系统上,您必须在文件名中的空格前加上反斜杠。
  • 请不要乞求支持,这不是 SO 的工作方式 (reference)

标签: java filenotfoundexception fileoutputstream


【解决方案1】:

Windows 不允许在文件名中使用冒号“:”。

【讨论】:

    【解决方案2】:

    我认为问题在于: 不是 Windows 中路径名的有效字符。

    来自 MSDN 文章“Naming Files, Paths, and Namespaces”:

    [...]

    使用当前代码页中的任何字符作为名称,包括 Unicode 字符和扩展字符集中的字符 (128–255),但以下情况除外:

    • 以下保留字符:
      • >(大于)
      • :(冒号)
      • "(双引号)
      • /(正斜杠)
      • \(反斜杠)
      • | (竖条或竖管)
      • ? (问号)
      • *(星号)

    [...]

    【讨论】:

      【解决方案3】:

      new java.util.Date().toString() 将给出以下格式的日期

      Thu Jan 08 20:51:01 IST 2015
      

      它包含 : 该字符不允许在 Windows 中的名称中使用。但是你可以在linux中使用它们

      因此,如果您想在两个平台上使用相同的东西,您必须更改日期的格式,可能使用SimpleDateFormat 或其他 例如

      SimpleDateFormat sd = new SimpleDateFormat("YY-MM-DD");
      System.out.println(sd.format(new Date()));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        • 2015-12-24
        • 2013-11-28
        • 2023-04-10
        • 2021-02-21
        • 2016-05-21
        • 1970-01-01
        相关资源
        最近更新 更多