如何在列表中添加某些路径?

时间:2016-01-19 21:46:47

标签: java android list android-studio

下面的代码计算具有特定名称的文件。然后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设置为List的大小时,我总是变为零。

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();

这里有什么问题?
(还有一点偏离主题 - 路径是否写得正确?我对它不确定。)

1 个答案:

答案 0 :(得分:1)

此方法size()将始终打印0,因为您自己的List实现具有错误的返回语句:

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

另外一件事,你实际上并没有在你的List中插入任何内容:

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

您的方法尚未完成与正常List执行相同的任务。 您最好使用ArrayList<File>List<File> ,这将采用所有正确的方法,不需要您的辛勤工作。不要重新发明轮子;)

最后,路径是正确声明的,但是您应该在执行代码之前测试文件是否存在于文件夹中。如下:

File[] files = dir.listFiles();
if (files.length > 0) {
    // loop and add to a list
}