版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012041204/article/details/82422059
ConcurrentModificationException 抛出的条件是: 一个迭代器在迭代集合的时候 集合被修改。
比如我在迭代一个目录集合,并进行目录的删除,这个时候就会出现这个异常。
所以我们可以先迭代到一个ArrayList上保存,然后再进行删除操作
下面是我在进行文件删除时使用的代码:
@Override
protected Boolean doInBackground(Iterator<String>... iterators) {
Iterator<String> iterator = iterators[0]; //删除的文件列表
ArrayList<String> fileNames = new ArrayList<>();
boolean success = false; //删除的状态
/*
*遍历保存到ArrayList中,不能直接使用迭代器进行删除,会导致 java.util.ConcurrentModificationException
* 因为迭代器不允许在使用过程中修改集合,而删除文件就是在修改集合内容。
* */
while (iterator.hasNext()){
String filePath = iterator.next();
fileNames.add(filePath);
}
for(int i = 0; i < fileNames.size(); i++){
if(FileUtil.deleteFiles(fileNames.get(i))){
success = true;
}else{
success = false;
return success;
}
}
return success;
}