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

我在一个文件夹中有几个文件,我想读取第一个文件并执行一些操作,在第一次迭代之后,我想从病房的第二个文件中读取文件以执行不同的操作集。


我怎样才能做到这一点?


    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


慕的地10843
浏览 183回答 3
3回答

达令说

获取第一个文件 aslistOfFiles[0]并对其执行操作 1。然后,使用从索引 1 开始的简单(常规)for循环。for (int i = 1; i < listOfFiles.length; i++) {&nbsp; &nbsp;File currentFile = listOfFiles[i];&nbsp; &nbsp;//do Operation 2 with currentFile}来自Files.listFiles的javadoc 的注释无法保证结果数组中的名称字符串会以任何特定顺序出现;特别是,它们不能保证按字母顺序出现。

斯蒂芬大帝

根据您的评论,在处理文件之前,您似乎不需要按特定顺序对文件列表进行排序。在这种情况下,File folder=new File(Folder);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;File[] listOfFiles=folder.listFiles();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;//use a normal for loop to keep track of the indexfor(int i=0; i<listOfFiles.length; i++){&nbsp; &nbsp;//the file in the current index of iteration&nbsp; &nbsp;File currentFile = listOfFiles[i];&nbsp; &nbsp;if(i==0){&nbsp; &nbsp; &nbsp; //Do something with first file&nbsp; &nbsp;}&nbsp; &nbsp;else{&nbsp; &nbsp; &nbsp; //Here I want to read from the 2nd file to do different set of operations&nbsp; &nbsp;}}在上面的代码中,将第一个文件的操作代码放在if块中,将其余文件的代码放在else块中

慕田峪4524236

别再用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)&nbsp; &nbsp; &nbsp;.sorted((a, b) -> { ... })&nbsp; &nbsp; &nbsp;// this realizes the skipping of the first element you initially requested:&nbsp; &nbsp; &nbsp;.skip(1)&nbsp; &nbsp; &nbsp;.forEach(f -> { ... });如果你想在第一个元素上执行动作 A 并在第二个元素上执行动作 B,它可能会变得有点棘手:你可以定义一个布尔值firstFileHasBeenProcessed作为外部依赖,true一旦你处理了第一个文件,它就会被设置,但我不是确定所有文件的使用者是否严格按顺序运行——或者在设置该标志之前,第一个文件的处理是否可能被中断以开始处理第二个文件。您始终可以将流渲染到数组...final Path[] allFiles = Files.newDirectoryStream(folder)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .sorted((a, b) -> { ... })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .toArray(Path[]::new);... 或者一个列表,但是,以获得更多的控制。final List<Path> allFiles = Files.newDirectoryStream(folder)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .sorted((a, b) -> { ... })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());boolean firstHasBeenProcessed = false;for (final Path currentFile: allFiles) {&nbsp; &nbsp; if (firstHasBeenProcessed) {&nbsp; &nbsp; &nbsp; &nbsp; processAsFollowUpFile(currentFile);&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; processAsFirstFile(currentFile);&nbsp; &nbsp; &nbsp; &nbsp; firstHasBeenProcessed = true;&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java