我有一个代码从文件夹中检索多个对象,对其进行反序列化并将其添加到字符串数组
public static String[] play(){
int i = 0;
List<String> args = new ArrayList<String>();
while (true) {
try {
args.add(processFile(i));
System.out.println(i);
i++;
}
catch (Exception e) {
System.out.println("No more files");
break;
}
}
String[] array = args.toArray(new String[0]);
return array;
}
private static String processFile(int fileNumber) throws Exception {
File file=new File("E:/proj/"+fileNumber+".bin");
FileInputStream fin=new FileInputStream("E:/proj/"+fileNumber+".bin");
//reading the byte content of the bin files
byte fileContent[] = new byte[(int)file.length()];
fin.read(fileContent);
//store the deserialized object that is returned to an object.
Object obj=serializer.toObject(fileContent);
//converting the obtained object to string and storing it to args, a string[]
String word=obj.toString();
return word;
}
}
此示例代码检索打开此层次结构后面的“seconds”文件夹的消息。TIMESTAMP CHART此文件夹最后可以看到。序列化bin文件的存储是这样的,即bin文件的数量创建的一秒钟存储在“秒”文件夹中。也就是说,如果在下午17:15:32创建一个bin,则bin文件将存储在2012年 - > 3个月 - > 21个日期 - > 17个小时 - >的文件夹下。 15分钟 - > 32秒 - &gt;一个或多个bin文件,具体取决于在那一秒创建的bin文件数。
如果我必须正常检索此层次结构中的bin文件,我可以在用户输入的时间内成功完成。但是如果给出时间间隔,则说从17:15:35到17:20:35检索所有bin文件;其中我必须返回在第15分钟第35秒,第15分钟第36秒获得的所有bin文件。 ......第16分钟的第1秒,依此类推至20分钟的35秒;从而完全准确地完成了5分钟的时间窗口,并在此间隔内检索所有bin文件。此外,不必每秒都发布一个bin文件,因为它可能会发生一秒钟或一分钟甚至,没有创建bin文件,因此层次结构中不存在第二个/分钟文件夹。也就是说,也许对于17:18:0到17:19:0,没有创建bin文件; for bin / maynot创建bin文件的一致性。并且bin文件的所有数据都必须存储在一个字符串数组中。 无论我如何循环它,我都无法达到预期的结果,所以我在这里提出了基本代码。我该怎么做呢?请帮忙
答案 0 :(得分:0)
使用您的解决方案,您只需创建数十亿个文件夹和文件来存储String对象。更好地使用数据库并将字符串和实时时间戳添加到表中,以便您可以在一段时间内轻松访问它们。这对于并发用户访问来说也更好。
答案 1 :(得分:0)
使用listFiles
类的File
方法,您可以获取该文件夹中的所有文件和文件夹。然后,您可以按名称对文件夹列表进行排序。例如,在文件夹15分钟中,您可能有09sec
15sec
55sec
个文件夹。
使用此排序列表(请注意,您需要添加前导零 - 09sec
而不是9sec
),您可以轻松地抓取所有正确的子文件夹,间隔时间为15分02秒到15分钟33秒:正确的子文件夹为{ {1}}和09sec
。要弄清楚这一点,您可以在整个文件夹树中使用相同格式的边界字符串比较。