您的位置:首页 > 编程语言 > Java开发

Java List 元素删除陷阱

2015-07-15 20:33 579 查看
上篇文章写到了对文件进行批量上传,其中遇到一个问题,就是针对用户上传来的文件进行筛选删除
错误的写法:/** 排除有误的图片 **/
List<MultipartFile> files = userBean.getNewPhoto();
for(MultipartFile file : files){
//名字是否合适
if(file.getName() == null && file.getName().equals("")){
files.remove(file);
continue;
}
//是否是图片
boolean isImg = FileUtil.filterType(file.getContentType());
if (!isImg) {
files.remove(file);
continue;
}
//是否大小合适
boolean isSuitableSize = FileUtil.filterFileSize(file);
if (!isSuitableSize) {
files.remove(file);
continue;
}
}咋一看,好像没什么错,其实仔细一想,发现问题,每次删除完之后,那么List就少1,所以会出现错误
正确的写法:/** 排除有误的图片 **/
List<MultipartFile> files = userBean.getNewPhoto();
Iterator<MultipartFile> iter= files.iterator();
while (iter.hasNext()){
MultipartFile file= iter.next();
//名字是否合适
if(file.getName() == null && file.getName().equals("")){
iter.remove();
continue;
}
//是否是图片
boolean isImg = FileUtil.filterType(file.getContentType());
if (!isImg) {
iter.remove();
continue;
}
//是否大小合适
boolean isSuitableSize = FileUtil.filterFileSize(file);
if (!isSuitableSize) {
iter.remove();
continue;
}
}里面的小方法:/**
* 过滤文件
*
* @param types
* @return
*/
public static boolean filterType(String type) {
for (String temp : FinalValues.userRegisterAllowFileTypeList) {
if (temp.equals(type)){
return true;
}
}
return false;
}

/**
* 过滤图片的大小
* @param multipartFile
* @return
*/
public static boolean filterFileSize(MultipartFile multipartFile) {
if(multipartFile.getSize() <0 || multipartFile.getSize() > FinalValues.MAX_ALBUM_PHOTO_SIZE){
return false;
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息