2015-04-11 11 views
0

то, что я пытаюсь сделать, это: - Сканирование каталога - Для каждой папки нашли добавить свое имя в ArrayList - Принесите этот ArrayList в главном классе и распечатать его.Получить ArrayList из другого класса

Вот мой 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); 

    } 

} 

Мой вывод: нулевой Почему это происходит? Заранее спасибо

ответ

1

Вы не вызвали метод scan() в любом месте вашего кода. Таким образом, просто вызов getScan() приведет к неинтеллизированному значению местоположений, то есть null.

, что вы можете сделать, это просто вызвать scan() метод перед вызовом getScan() метода как:

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

Спасибо, это была очень глупая ошибка :) – leota

+0

@ user3276178 да и от этих глупых ошибок мы учимся улучшать :) – exexzian

0

Поскольку ScanDirs() конструктор использует конструктор по умолчанию (который устанавливает все значения по умолчанию), то locations список будет set to null. Если вы хотите установить список мест для чего-то, создать конструктор для класса ScanDirs:

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

или вы могли бы также сделать это:

public ScanDirs(){ 
locations = new ArrayList<String>(); 
this.scan(); 
} 
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()); 
} 
0

Вы должны вызвать метод Scan() в файле main.java, или вам нужно добавить его в конструктор ScanDirs класса.

0

Эй вы не звонили scan() в любом месте. Итак, вы должны добавить этот оператор в main(), прежде чем звонить getScan().

scanObject.scan();

Это будет определенно сделать его запустить.

Смежные вопросы