Java 文件输出流 Windows/Linux

Java FileOutputStream Windows/Linux

我收到了这个代码:

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)

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

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

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

[...]

Use any character in the current code page for a name, including Unicode characters and characters in the extended character set (128–255), except for the following:

  • The following reserved characters:
    • < (less than)
    • > (greater than)
    • : (colon)
    • " (double quote)
    • / (forward slash)
    • \ (backslash)
    • | (vertical bar or pipe)
    • ? (question mark)
    • * (asterisk)

[...]

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()));