查找java中是否存在特定的文件路径(不是常规搜索,而是寻找有效的算法)



我正在根目录中以以下格式存储一些输出例如

/from_2012_07_17_01_apple_to_2012_07_23_05_apple/

该目录中的详细信息是通过运行Java程序生成的

第一个字段是年,第二个字段是月,第三个字段是日,第四个字段是小时。这是我已经存储在根目录中的文件。其意图是将其用于以后的目的。

在后面的阶段,如果我有一个查询,要求以下

/from_2012_07_19_01_apple_to_2012_07_20_05_apple/

我想知道这已经在根目录中以19>17和20<23.我想确定这一点,并确保我不会再次运行该程序,而是重复使用该程序,然后直接向用户显示输出。我可以通过一些手工的拆分和比较来做到这一点。但我正在为此寻找一些有效的算法。

EDITED 

当用户输入为(从19-20)时。我需要知道以下任何文件的存在

2012_07_17_01_apple_to_2012_07_23_01_apple,2012_07_14_01_apple_to_2012_07_25_01_apple

如果有这两个。。我需要选择第一个文件,因为搜索空间较小,这是有效的。。。因此,我正在寻找这个解决方案

我不确定你是否有子文件夹,但解决这个问题的最好算法似乎是回溯。


好吧,只需按字母顺序对文件夹名称进行排序,然后将查询按排序插入其中,insertSort会给你一个i索引。之后,创建排序列表的一部分,其中包含从0到i-1的索引。从那时起,您只能处理名称的"to_*"部分。再次按字母顺序对子列表进行排序(仅使用to_*部分),并插入再次排序的查询字符串,这将为您提供一个j索引。在此列表中,从j+1到.length-1索引的每个文件夹都包含查询文件夹。在它之后,你必须找到最短的一个,有裂缝左右。我认为没有比这更有效的解决方案了。你可以阅读最抽象的回溯算法,它可能更快,但如果它能解决它的话,它非常复杂。

我在评论后开始删除它,但我认为应该留下它来帮助澄清问题。


你太努力了。后退一步。。。

String fname = createNameFromDates(... params ...); // returning "/from_2012_07_19_01_apple_to_2012_07_20_05_apple"
File target = new File(fname);
if (target.isDirectory()) {
   // directory exists...
} else {
   // create directory & data
}

首先,使用经过优化和安全的nio2java7工具

然后您可以split("_")文件名,并比较字段[n][n+m]

最新更新