2016-01-19 2 views
0

Код ниже подсчитывает файлы с определенным именем. TypeCount - это некоторое число (например, четыре).Как добавить определенные пути в список?

File dir = new File(Environment.getExternalStorageDirectory().toString(), "/AppDir/"); 

File[] files=dir.listFiles(); 
int typeCount = 0; 
String type = "dog"; 


for (int i=0; i<files.length; i++) { 
    File file = files[i]; 
    String filepath = file.getPath(); 
     if(filepath.contains(type)){ 
      typeCount = typeCount + 1; 
      } 
    } 

В этом коде я хочу поставить все пути (File) в List<File>. Но когда я устанавливаю typeCount в размер списка, я получаю всегда нуль вместо этого.

File dir = new File(Environment.getExternalStorageDirectory().toString(), "/AppDir/"); 

File dir = new File(Environment.getExternalStorageDirectory().toString(), "/AppDir/"); 

File[] files=dir.listFiles(); 

int typeCount = 0; 

String typeype = "dog"; 

List<File> myList; 
myList = new List<File>() { 
    @Override 
    public void add(int i, File file) { 

    } 

    @Override 
    public boolean add(File file) { 
     return false; 
    } 

    @Override 
    public boolean addAll(int i, Collection<? extends File> collection) { 
     return false; 
    } 

    @Override 
    public boolean addAll(Collection<? extends File> collection) { 
     return false; 
    } 

    @Override 
    public void clear() { 

    } 

    @Override 
    public boolean contains(Object o) { 
     return false; 
    } 

    @Override 
    public boolean containsAll(Collection<?> collection) { 
     return false; 
    } 

    @Override 
    public File get(int i) { 
     return null; 
    } 

    @Override 
    public int indexOf(Object o) { 
     return 0; 
    } 

    @Override 
    public boolean isEmpty() { 
     return false; 
    } 

    @NonNull 
    @Override 
    public Iterator<File> iterator() { 
     return null; 
    } 

    @Override 
    public int lastIndexOf(Object o) { 
     return 0; 
    } 

    @Override 
    public ListIterator<File> listIterator() { 
     return null; 
    } 

    @NonNull 
    @Override 
    public ListIterator<File> listIterator(int i) { 
     return null; 
    } 

    @Override 
    public File remove(int i) { 
     return null; 
    } 

    @Override 
    public boolean remove(Object o) { 
     return false; 
    } 

    @Override 
    public boolean removeAll(Collection<?> collection) { 
     return false; 
    } 

    @Override 
    public boolean retainAll(Collection<?> collection) { 
     return false; 
    } 

    @Override 
    public File set(int i, File file) { 
     return null; 
    } 

    @Override 
    public int size() { 
     return 0; 
    } 

    @NonNull 
    @Override 
    public List<File> subList(int i, int i1) { 
     return null; 
    } 

    @NonNull 
    @Override 
    public Object[] toArray() { 
     return new Object[0]; 
    } 

    @NonNull 
    @Override 
    public <T> T[] toArray(T[] ts) { 
     return null; 
    } 
}; 

for (int i=0; i<files.length; i++){ 
    File file = files[i]; 
    String filepath = file.getPath(); 
    if(filepath.contains(type)){ 
     myList.add(file); 
    } 
} 

typeCount = myList.size(); 

Что здесь не так?
(И немного не по теме - написано ли путь правильно, я не уверен, что об этом.)

+5

Вы реализуете свой собственный 'List' (и не используете, например,' ArrayList'), это намеренно? Вы могли бы просто сделать «Список myList = новый ArrayList <>();' вместо этого. –

ответ

1

Этот метод size() всегда будет печатать 0, потому что ваш собственный List реализация имеет неправильный возвращающегося заявление:

@Override 
public int size() { 
    return 0; // Oops! 
} 

Другое дело, что и вы на самом деле не вставить что-нибудь в вашем List из-за этого:

@Override 
public boolean add(File file) { 
    return false; // Hum... 
} 

Ваш мето ds еще не завершены для выполнения тех же задач, что и обычный List. Вам лучше использовать ArrayList<File> или List<File>, который будет иметь все правильные методы и не потребует от вас тяжелой работы. Не изобретайте колесо;)

Наконец, путь объявлен правильно, но вы должны проверить, представлены ли файлы в папке перед выполнением кода. Что-то следующее:

File[] files = dir.listFiles(); 
if (files.length > 0) { 
    // loop and add to a list 
} 
Смежные вопросы