簡體   English   中英

從另一個類獲取ArrayList

[英]Get ArrayList from another Class

我想做的是:-掃描目錄-對於找到的每個文件夾,將其名稱添加到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為什么會發生這種情況? 提前致謝

您在代碼的任何地方都沒有調用scan()方法。 因此,簡單地調用getScan()將導致未初始化的位置值,即null

你可以做的是簡單地調用scan()之前調用方法getScan()方法,如:

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

因為ScanDirs()構造函數使用的是默認構造函數(它將所有內容設置為默認值),所以locations列表將設置為null。 如果要將位置列表設置為某些內容,請為ScanDirs類創建一個構造函數:

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類的構造函數中。

嘿,您還沒有在任何地方調用scan() 因此,您應該在調用getScan()之前在main()中添加此語句。

scanObject.scan();

這肯定會使其運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM