无法使用DateTime作为文件夹名称创建文件夹

5
我正在尝试使用时间戳作为文件夹名称创建文件夹。当我在下面的代码中使用timeStamp变量时,我使用的代码无法创建文件夹。但是,如果我直接设置文件夹名称,则可以创建文件夹,如下所示...
File dir = new File("Hello") 

文件夹已创建。使用日期和时间设置文件夹名称的方法是否正确?
public void logEmData(String reason,Campus c ) throws IOException 
{

    LocalDateTime time = LocalDateTime.now();

    try(FileWriter writer = new FileWriter(file, true))
    {
        writer.write("Building " + c.getName() + " Entered Emergency Mode" + System.lineSeparator());

        writer.write(" Reason: " + reason + System.lineSeparator());

        writer.write(time.toString() + System.lineSeparator());

       //Create folder 
        String timeStamp = "EM_" + time;
        File dir = new File(timeStamp);
        dir.mkdir();

    }

LocalDateTime 可能包含 /\: 字符,这些字符在文件夹名称中是非法的(至少在 Windows 下是这样)。 - MadProgrammer
@MadProgrammer 要创建 \ 字符,请尝试使用 \\ 进行转义,例如 \\\。或者要创建 \\,您需要用两个 \\ 包围它,例如 \`\```(该死,我来晚了)。 - Pshemo
4个回答

4
LocalDateTime.now() 可以获取一个日期,格式大致如下:2015-01-14T16:00:49.455
在 Windows 下创建文件夹时,: 是一个有问题的字符,因为它是一个保留字符。您可能需要考虑将字符串格式化以将其更改为 -

1
在Unix中,:.都是路径的有效字符。Windows不允许使用:,但可以使用. - dimo414

1
大多数日期格式都包含Windows无法处理的字符,特别是MM/dd/yyyy (\)或包含时间(:)的任何内容。
最好的方法,也具有词典排序的优点,是使用ISO-8601格式的YYYY-MM-dd,或者如果您绝对需要时间信息,则使用下划线作为分隔符而不是冒号。

0
使用Java NIO2来实现此功能。
Files.createDirectory(Paths.get("path-to-dir"));

我认为这会有所帮助。并使用自定义日期格式,例如MM-dd-yyyy。


0

LocalDateTime.now.toString() 会生成一个类似于以下的字符串:

2018-01-01T00:00:00.000

在Windows上,这不是一个有效的目录名称,因为目录名称中不允许使用冒号(:)字符。

因此,您可以删除冒号(:)或将其替换为其他字符:

 String directoryName = LocalDateTime.now.toString().replaceAll(":", "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接