从Java中第二个文件开始的文件夹中读取所有文件

时间:2018-10-11 04:51:27

标签: java file

我的文件夹中文件很少,我想读取第一个文件并执行一些操作,并且在第一次迭代之后,我想从第二个分区读取文件以执行不同的操作。

我该怎么做?

    File folder=new File(Folder);            
    File[] listOfFiles=folder.listFiles();          

        for(File file:listOfFiles)
        {
            //Do something
        }
        //Here I want to read from the 2nd file to do different set of operations

3 个答案:

答案 0 :(得分:2)

获取第一个文件为listOfFiles[0]并对其进行操作。

然后,使用从索引1开始的简单(常规) for 循环。

for (int i = 1; i < listOfFiles.length; i++) {
   File currentFile = listOfFiles[i];
   //do Operation 2 with currentFile
}

来自javadoc of Files.listFiles

的注释
  

不能保证结果数组中的名称字符串会以任何特定顺序出现;尤其不能保证它们按字母顺序显示。

答案 1 :(得分:1)

根据您的评论,似乎您不需要在处理文件之前按特定顺序对文件列表进行排序。在这种情况下,

File folder=new File(Folder);            
File[] listOfFiles=folder.listFiles();          

//use a normal for loop to keep track of the index
for(int i=0; i<listOfFiles.length; i++){
   //the file in the current index of iteration
   File currentFile = listOfFiles[i];
   if(i==0){
      //Do something with first file
   }
   else{
      //Here I want to read from the 2nd file to do different set of operations
   }
}

在上面的代码中,将第一个文件的操作代码放在 if 块中,并将其余文件的代码放入 else

答案 2 :(得分:0)

不再使用java.io.File,请使用java.nio-已经存在了几年!除了更容易使用之外(包括Java 8流),好处之一是您不局限于系统的默认文件系统。您甚至可以使用内存文件系统,例如Google的 JimFS 。正如其他人指出的那样,不能保证文件的顺序。您可能但是介绍了自己的排序方式:

FileSystem fs = FileSystems.getDefault(); // use a file system of your choice here!
Path folder = fs.getPath(...);

Files.newDirectoryStream(folder)
     .sorted((a, b) -> { ... })
     // this realizes the skipping of the first element you initially requested:
     .skip(1)
     .forEach(f -> { ... });

如果要在第一个元素上执行操作A,然后在第二个元素上执行操作B,则可能会有点棘手:您可以将布尔值firstFileHasBeenProcessed定义为外部依赖项,将其设置为{{1 }}处理完第一个文件后,但我不确定所有文件的使用者是否将严格按顺序运行,或者是否可以中断第一个文件的处理以开始处理第二个文件,可以设置该标志。

您始终可以将流呈现为数组...

true

...或列表,以获得更多控制权。

final Path[] allFiles = Files.newDirectoryStream(folder)
                      .sorted((a, b) -> { ... })
                      .toArray(Path[]::new);