从另一个 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();
这肯定会成为 运行。
我想做的是: - 扫描目录 - 对于找到的每个文件夹,将其名称添加到 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();
这肯定会成为 运行。