0

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

这是我的 ScanDirs 类:

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;
    }
}

这是主类:

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);

    }

}

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

4

5 回答 5

1

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

您可以做的只是在调用scan()方法之前调用getScan()方法,例如:

        scanObject = new ScanDirs();
        scanObject.scan();  // calling scan method
        ArrayList<String> list = scanObject.getScan();
        System.out.println(list);
于 2015-04-11T16:58:29.810 回答
0

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

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

或者你也可以这样做:

public ScanDirs(){
locations = new ArrayList<String>();
this.scan();
}
于 2015-04-11T16:58:49.457 回答
0

下面的代码将为您更改以下 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());
 }
于 2015-04-11T17:00:33.810 回答
0

您必须调用文件Scan()中的方法main.java,或者您需要将其添加到ScanDirs类的构造函数中。

于 2015-04-11T17:07:29.420 回答
0

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

scanObject.scan();

这肯定会使其运行。

于 2015-04-12T05:44:33.890 回答