JAVA - 数组越界错误

标签 java arrays file exception text

我的逻辑有问题,希望得到一些指点。当我尝试迭代目录中的文件数组并将以 .txt 结尾的文件存储在另一个数组中时,我的代码会产生数组越界异常。

我认为我的问题是所有文件的数组大于 txt 文件的数组,这似乎是错误最合理的原因。问题是我不知道为什么它在第二个循环中比第一个循环中发现更多的 txt 文件出现。

这是代码:

public static void ListFiles(String file_dir) {
        String files;
        int txtCounter = 0;

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

        //Count all txt files
        for (int y = 0; y < listOfFiles.length; y++) {
            if (listOfFiles[y].isFile()) {
                files = listOfFiles[y].getName();
                if (files.endsWith(".txt") || files.endsWith(".TXT")) {
                    txtCounter++;//Add to the count
                }
            }
        }

        //Create array for the list of txt files.
        String txtFiles[] = new String[txtCounter];

        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                files = listOfFiles[i].getName();
                if (files.endsWith(".txt") || files.endsWith(".TXT")) {
                    //Add all txt files to new array txtFiles
                    txtFiles[i] = folder + files;                   
                    System.out.println(txtFiles[i]);
                }
            }
        }

        //Send array back to Main
        //return txtFiles[];
    }

我是否让事情变得比原来更难了?我正在尝试获取一份文本文件列表,替换文件中的某些单词,并在完成后将它们全部合并到一个文件中。

谢谢!

更新:

public static String[] ListManualSections(String file_dir) {
    file_dir = file_dir + "\\manualSections\\";

    String files;

    //Create list of all files in the manualSections directory.
    File folder = new File(file_dir);
    File[] listOfFiles = folder.listFiles(); 

    //Dynamic list of text files
    ArrayList al = new ArrayList();

    //Add each occurrence of a text file to the ArrayList
    for (int i = 0; i < listOfFiles.length; i++) {
        files = listOfFiles[i].getName();
        if (listOfFiles[i].isFile() && files.toLowerCase().endsWith(".txt")) {
            al.add(folder + "\\" + files);
            //System.out.println(al);
        }
    }

    //Send list back to Main
    String[] txtFiles = (String[]) al.toArray(new String[al.size()]);
    return txtFiles;
}

最佳答案

第二个 for 循环似乎对它是在 txtFiles 上迭代还是在 listOfFiles 上迭代感到困惑,后者可能具有不同的长度。特别是,当 i 可能大于 txtFiles 的长度时,您可能不应该写入 txtFiles[i]

不过,大多数情况下,如果您只使用 ArrayList,此代码会更简单。

关于JAVA - 数组越界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11298842/

相关文章:

php - 嵌套形式是被禁止的吧?那怎么办呢?

java - Google Cloud Java 客户端库未通过 gradle 编译

java - Java中如何提取一个字符串中的所有整数并转换为指定的char值?

python - numpy python 中的 "IndexError: too many indices"

php - Firebase PHP 数据提交 - arrayValue, mapValue

java - 在 Java 中,如何一次从文件中迭代多个元素?

jquery - 使用 jquery 文件上传插件并行分块上传文件

java - 如何找到file.txt的最大和最小数字?

java - 如何避免在java中替换文本中的特定单词

java - 如何按字符串的最后一点拆分?