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

我找到了一个遍历文件夹并返回文件名的代码。我创建了一个包含 8000 个位置的 String[] 数组,因为我有大约 7500 个文件并且还在增加。如果我使用我在 system.out.println 中找到的代码,它会返回每个文件名,但如果我使用我的代码将位置写入数组索引,我只会得到 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);

        }

    }

}

我希望能够遍历文件名并获取文件名,以便我可以使用它。但实际上只有第一个位置发生了变化,其他所有位置仍然为空。


犯罪嫌疑人X
浏览 93回答 2
2回答

繁花如伊

永远不会使用在“c++”处更改的值。每次你的代码执行到 c++ 之前,c 的变量被重置为 0。

慕容3067478

这与使用流 API(Java 1.8 及更高版本)的算法相同:String[]&nbsp;fileNames&nbsp;=&nbsp;Arrays.stream(folder.listFiles())&nbsp;//&nbsp;stream&nbsp;all&nbsp;the&nbsp;files&nbsp;in&nbsp;the&nbsp;directory &nbsp;&nbsp;&nbsp;&nbsp;.filter(file&nbsp;->&nbsp;!file.isDirectory())&nbsp;//&nbsp;filter&nbsp;any&nbsp;directory&nbsp;files&nbsp;in&nbsp;there &nbsp;&nbsp;&nbsp;&nbsp;.map(File::getName)&nbsp;//&nbsp;map&nbsp;an&nbsp;item&nbsp;to&nbsp;its&nbsp;name &nbsp;&nbsp;&nbsp;&nbsp;.toArray(String[]::new);&nbsp;//&nbsp;collect&nbsp;as&nbsp;a&nbsp;String&nbsp;array
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java