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;
}
错误的写法:/** 排除有误的图片 **/
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;
}
相关文章推荐
- python list删除操作
- java 中List删除实例详解
- JAVA基本语法--java的数据类型
- Java 截取字符串
- Java while 和 for 的区别
- 【转】java内存分配和String类型的深度解析
- Java基础---synchronized 详解
- java容器类---概述
- 算法学习之一java实现选择排序
- android studio删除行 相当于 Eclipse中 Ctrl+D
- 堆排序算法之JAVA实现
- 2015/7/15/java第一天
- Java NIO:NIO概述
- [LeetCode][Java] Spiral Matrix II
- java内存管理的8个小技巧
- android studio中文件内容查找相当于Eclipse中Ctrl+H & 查找项目中所有中文
- java之多线程
- MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法
- ajax批量上传图片
- 在eclipse项目中使用maven管理依赖