0

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

/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

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

4

3 回答 3

1

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


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

于 2012-07-30T03:14:48.593 回答
0

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


你太努力了。退后...

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
}
于 2012-07-30T02:15:37.323 回答
0

一、使用nio2 java7工具,优化安全。

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

于 2012-07-30T07:07:24.677 回答