从另一个类获取ArrayList

时间:2015-04-11 16:53:44

标签: java arraylist data-exchange

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

这是我的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 为什么会这样?提前致谢

5 个答案:

答案 0 :(得分:1)

您还没有在代码中的任何位置调用scan()方法。因此,只需调用getScan()即可获得非初始化位置值,即null

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

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

答案 1 :(得分:0)

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

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

或者您也可以这样做:

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

答案 2 :(得分: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());
 }

答案 3 :(得分:0)

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

答案 4 :(得分:0)

嘿,你没有在任何地方打过scan()。 所以你应该在调用getScan()之前在main()中添加这个语句。

scanObject.scan();

这肯定会让它运行。