下面的代码计算具有特定名称的文件。然后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();
这里有什么问题?
(还有一点偏离主题 - 路径是否写得正确?我对它不确定。)
答案 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
}