循环以从层次结构的不同文件夹中读取多个文件

时间:2012-03-21 11:14:00

标签: java

我有一个代码从文件夹中检索多个对象,对其进行反序列化并将其添加到字符串数组

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文件的所有数据都必须存储在一个字符串数组中。 无论我如何循环它,我都无法达到预期的结果,所以我在这里提出了基本代码。我该怎么做呢?请帮忙

2 个答案:

答案 0 :(得分:0)

使用您的解决方案,您只需创建数十亿个文件夹和文件来存储String对象。更好地使用数据库并将字符串和实时时间戳添加到表中,以便您可以在一段时间内轻松访问它们。这对于并发用户访问来说也更好。

答案 1 :(得分:0)

使用listFiles类的File方法,您可以获取该文件夹中的所有文件和文件夹。然后,您可以按名称对文件夹列表进行排序。例如,在文件夹15分钟中,您可能有09sec 15sec 55sec个文件夹。

使用此排序列表(请注意,您需要添加前导零 - 09sec而不是9sec),您可以轻松地抓取所有正确的子文件夹,间隔时间为15分02秒到15分钟33秒:正确的子文件夹为{ {1}}和09sec。要弄清楚这一点,您可以在整个文件夹树中使用相同格式的边界字符串比较。