迭代未在正确的数组索引上写

时间:2019-07-04 10:01:39

标签: java arrays iterator

我找到了一个遍历文件夹并返回fileNames的代码。 我创建了一个具有8000个位置的String []数组,因为我有大约7500个文件,并且越来越多。 如果我使用在system.out.println中找到的代码,它将返回每个文件名,但是,如果我使用我的代码将位置写入Array索引,则我只会得到1个位置,而其余位置都为空。 不幸的是我无法解决问题。


import java.io.*;

public class Tester {
    public static void main(String[] args) {
        File folder = new File("mypath\\myfilefolder");
        File[] listOfFiles = folder.listFiles();
        String[] fileNames = new String[8000];

        for (int i = 0; i < listOfFiles.length; i++) {
            int c = 0;
          if (listOfFiles[i].isFile()) {
              fileNames[c++] = listOfFiles[i].getName();
              // Seems not to be doing anything like supposed
    //      System.out.println(listOfFiles[i].getName());
    //      Prints every filename on a new line       
          } else if (listOfFiles[i].isDirectory()) {
            System.out.println("Directory " + listOfFiles[i].getName());
          }
        }

        for (String element: fileNames) {
            System.out.println(element);
        }
    }
}

我希望能够迭代低谷的fileNames并获取filesNames,以便我可以使用它。 但是实际上只有第一个位置会发生变化,其他所有位置仍然为空。

2 个答案:

答案 0 :(得分:0)

从不使用在'c ++'处更改的值。每次在代码执行到c ++之前,将c的变量重置为0。

答案 1 :(得分:0)

这与使用 stream API (Java 1.8及更高版本)的算法相同:

String[] fileNames = Arrays.stream(folder.listFiles()) // stream all the files in the directory
    .filter(file -> !file.isDirectory()) // filter any directory files in there
    .map(File::getName) // map an item to its name
    .toArray(String[]::new); // collect as a String array