我想做的是: - 扫描目录 - 对于找到的每个文件夹,将其名称添加到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 为什么会这样?提前致谢
答案 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();
这肯定会让它运行。