【问题标题】:Get ArrayList from another Class从另一个类获取 ArrayList
【发布时间】:2015-04-11 16:53:43
【问题描述】:

我想要做的是: - 扫描目录 - 对于找到的每个文件夹,将其名称添加到 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);

    }

}

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

【问题讨论】:

    标签: java arraylist data-exchange


    【解决方案1】:

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

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

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

    【讨论】:

    • @user3276178 是的,从这些愚蠢的错误中我们学会改进:)
    【解决方案2】:

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

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

    或者你也可以这样做:

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

    【讨论】:

      【解决方案3】:

      下面的代码会帮你改变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());
       }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          scanObject.scan();

          这肯定会让它运行。

          【讨论】:

            猜你喜欢
            • 2016-06-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-25
            • 1970-01-01
            • 1970-01-01
            • 2017-10-19
            • 1970-01-01
            相关资源
            最近更新 更多