如何根据 java 中的时间戳将文件移动到 year/month/day 文件夹

How to move files to year/month/day folders based on timestamp in java

我有以时间戳作为文件名的文件。我想根据它的时间戳将这些文件移动到 years/month/day 文件夹中,它只是文件名。

例如:文件名=2017-11-2_23-59-59(YYYY-mm-dd_HH-MM-SS)。现在我想将此文件移动到 2017 文件夹和该文件夹中的 11(月)文件夹和 2(日期)文件夹中,如果该文件夹不存在,请创建一个。

所以所有天文件夹应该在月文件夹内,月文件夹应该在年文件夹内。这是我需要的文件夹结构。

这可能对您有帮助:

String file = form.getFile().getOriginalFilename();
String[] dateParts = file.split("-");
String year = dateParts[0]; 
String month = dateParts[1]; 
String day = dateParts[2]; 
String UPLOADED_FOLDER = "C://Users//pandeyv//Desktop//"+year+"//"+month+"//"+day+"//";
File dir = new File(UPLOADED_FOLDER);
if (!dir.exists())
    dir.mkdirs();

我假设你有一个 Path 以某种方式进入你的文件。也许您使用 Paths.get() 得到一个。或者获取保存文件的文件夹(目录)的路径,然后 Files.list() 获取文件夹中每个文件的路径。从您的 Path 中获取文件名(例如 2017-11-2_23-59-59)。

我建议您使用 DateTimeFormatterLocalDateTime 将文件名解析为日期时间。在为 DateTimeFormatter 指定格式模式时,请注意区分大小写。你需要像 uuuu-M-d_H-mm-ss 这样的模式;请自己微调。

为您的目标文件夹构建一个新的 Path(例如,2017/11/02)。使用方法 getYeargetMonthValuegetDayOfMonth 从日期时间获取年、月和日。或者使用格式化程序将它们作为字符串而不是 ints 获取。我更愿意为所有月份和日期文件夹使用两位数的名称(09 表示九月,02 表示第二个月)。在某些情况下,这将帮助您获得正确的时间顺序排序;但是,您知道您的要求,我不知道。同样,使用 Paths.get() 构建路径。然后使用 Files.createDirectories() 确保您的嵌套文件夹已在文件系统中创建(如果它们已经存在,则该方法不执行任何操作,只是 returns 路径)。

使用 Path.resolve() 将您的文件名附加到文件夹路径。最后 Files.move() 会将您的文件移动到目标文件夹。