【问题标题】:How to fix the "cannot find symbol" error in Java? [duplicate]如何修复 Java 中的“找不到符号”错误? [复制]
【发布时间】:2019-06-16 15:04:06
【问题描述】:

我编写了一段代码,将所有 CSV 文件的内容附加到一个列表中。编译此程序会在 '''Iterator iter = full_files.iterator();''' 行生成“找不到符号”错误

我检查了我的声明,一切似乎都很好。我已经在上一行声明并初始化了 full_files。

public ArrayList<String[]> readCSV(File FDir) throws IOException {
        File[] files = FDir.listFiles();
        File F = files[0];
        ArrayList<String[]> all_list = new ArrayList<>();
        ArrayList<String[]> list = new ArrayList<>();

        // Creating a file to point to the "Full" directory
        File FullDir = new File(F.getParent() + "/Full/");
        File[] full_files = FullDir.listFiles();

        Iterator<File> iter = full_files.iterator();

        // Iterating through the files in "Full"
        while(iter.hasNext()) {
                File file = iter.next();
                if(GetFileExtension.get(file).equals(".csv")) {
                        list = CSVHandler.readCSV(file);
                        all_list.addAll(list);
                }
        }

        // Checking if the file outside "Full" is a CSV
        if(GetFileExtension.get(F).equals(".csv")) {
                list = CSVHandler.readCSV(F);
                all_list.addAll(list);
        }

        return all_list;

}

这是我在编译过程中遇到的错误。

shared/utilities/main.java:82: error: cannot find symbol

    Iterator<File> iter = full_files.iterator();

                              ^
symbol:   method iterator()

location: variable fast of type File[]

1 error

【问题讨论】:

  • 错误说明了一切。您正在尝试对 File[] 类型的变量(即文件数组)调用 iterator()。但是数组没有任何 iterator() 方法。它们只有 Object 的方法和一个长度属性。

标签: java cannot-find-symbol


【解决方案1】:

首先,您甚至不需要迭代器,这要感谢自 Java 7 以来的for(File file : full_files)

这是一个工作版本:

public List<String[]> readCSV(File dir) throws IOException {
  File[] files = dir.listFiles();
  List<String[]> allMatchingFiles = new ArrayList<>();

  if (files == null || files.length < 1) {
    return allMatchingFiles;
  }

  File firstFile = files[0];

  // Creating a file to point to the "Full" directory
  File fullDir = new File(firstFile.getParent() + "/Full/");
  File[] fullDirFiles = fullDir.listFiles();

  // Iterating through the files in "Full"
  if (fullDirFiles != null) {
    for (File file : fullDirFiles) {
      if (GetFileExtension.get(file).equals(".csv")) {
        allMatchingFiles.addAll(CSVHandler.readCSV(file));
      }
    }
  }

  // Checking if the file outside "Full" is a CSV
  if (GetFileExtension.get(firstFile).equals(".csv")) {
    allMatchingFiles.addAll(CSVHandler.readCSV(firstFile));
  }

  return allMatchingFiles;

}

如你所见,我写得更保守一些,例如检查空值。 我也使用 List 而不是 ArrayList.

此外,Java 中的变量名通常使用 lowerCamelCase。

@Joakim Danielson:好点,相应地更改了代码:)

【讨论】:

  • 既然要重写代码,为什么不自己使用小写的变量名呢?
猜你喜欢
  • 1970-01-01
  • 2013-11-29
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
相关资源
最近更新 更多