从另一个 Class 获取 ArrayList

Get ArrayList from another Class

我想做的是: - 扫描目录 - 对于找到的每个文件夹,将其名称添加到 ArrayList - 将此 ArrayList 带到 Main Class 并打印它。

这是我的 ScanDirs Class:

import java.io.File;
import java.util.ArrayList;

public class ScanDirs {

    private ArrayList<String> locations;
    public void scan() {
        File rootDir = new File("./src/data");
        locations = new ArrayList<String>();
        for (File f : rootDir.listFiles()) {
            String fName = f.getName();
            locations.add(fName);
        }
    }
    public ArrayList<String> getScan(){
        return locations;
    }
}

这是主要内容 Class:

import java.util.ArrayList;

public class Main {
    private static ScanDirs scanObject;

    public static void main(String[] args) {

        scanObject = new ScanDirs();
        ArrayList<String> list = scanObject.getScan();
        System.out.println(list);

    }

}

我的输出是:空 为什么会这样?提前致谢

您没有在代码中的任何地方调用 scan() 方法。因此,简单地调用 getScan() 将导致未初始化的位置值,即 null.

你可以做的就是在调用 getScan() 方法之前简单地调用 scan() 方法,例如:

        scanObject = new ScanDirs();
        scanObject.scan();  // calling scan method
        ArrayList<String> list = scanObject.getScan();
        System.out.println(list);

因为 ScanDirs() 构造函数使用默认构造函数(它将所有内容设置为其默认值),所以 locations 列表将设置为空。如果要将位置列表设置为某些内容,请为 ScanDirs class:

创建一个构造函数
public ScanDirs(ArrayList<String> locations){
this.locations = locations;
}

或者您也可以这样做:

public ScanDirs(){
locations = new ArrayList<String>();
this.scan();
}

下面的代码将为您更改下面的 getScan 方法

public ArrayList<String> getScan(){
this.scan();    
return locations;
}  

并进行更改以提高可读性。

File folder = new File("./src/data");
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
  if (listOfFiles[i].isFile()) {
    location.add(listOfFiles[i].getName());
 }

你必须在main.java文件中调用Scan()方法,或者你需要将它添加到ScanDirs class.[=13的构造函数中=]

嘿,你没有在任何地方打电话给 scan()。 所以你应该在 main() 中添加这个语句,然后调用 getScan() .

scanObject.scan();

这肯定会成为 运行。