62,621
社区成员
发帖
与我相关
我的任务
分享
已經有人解決了!package com.djk.design.Test;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
/**
* 客户端测试方法
* @author djk
*
*/
public class PictureClient
{
public static void main(String[] args) throws Exception
{
//指定要复制的图片的后缀名
List<String> list = new ArrayList<String>();
list.add("jpg");
ValidatePicture validatePicture = new DjkValidatePictrue(list);
HandlePictrue handlePictrue = new DjkHandlePicture(validatePicture);
//指定源文件夹和目标文件假
handlePictrue.copyPictrue("D:/test", "E:/picture/");
}
}
/**
* 校验图片接口包括
* 1:图片的尺寸为800*800
* 2:图片的大小小于300K
* 3:得到指定路径下的所有图片路径
* @author djk
*
*/
interface ValidatePicture
{
/**
* 检查图片的尺寸是否为800*800是返回true,不是返回false
* @param path
* @return
*/
boolean isSizeInRange(String path);
/**
* 检查图片是否小于300K小于则返回true大于等于则返回false
* @param path
* @return
*/
boolean isSizeOk(String path);
/**
* 得到这个文件下的所有的图片
* @param path
* @return
*/
List<String> getAllPiacturePath(String path);
}
/**
* 图片处理接口包括
* 1:
* 2:复制符合条件的图片
*
* @author djk
*
*/
interface HandlePictrue
{
/**
* 复制图片
*/
void copyPictrue(String source,String path) throws Exception;
}
/**
* 校验实现类
* @author djk
*
*/
class DjkValidatePictrue implements ValidatePicture
{
private static List<String> list = new ArrayList<String>();
/**
* 图片的后缀
*/
private List<String> pictureSuffix ;
public DjkValidatePictrue(List<String> pictureSuffix)
{
this.pictureSuffix = pictureSuffix;
}
@Override
public boolean isSizeInRange(String path)
{
int height=0;
int weight = 0;
try {
InputStream is = new FileInputStream(new File(path));
BufferedImage bufferedImage = ImageIO.read(is);
height = bufferedImage.getHeight();
weight = bufferedImage.getWidth();
} catch (Exception e) {
}
return MyConstatn.PICTUREHEIGHT.getValue()==height&&MyConstatn.PICTUREWEIGHT.getValue()==weight?true :false;
}
@Override
public boolean isSizeOk(String path)
{
File file = new File(path);
long fileSize = file.length();
return fileSize<MyConstatn.PICTRUESIZE.getValue()?true:false;
}
/**
* 递归得到文件夹下的所有图片路径
*/
@Override
public List<String> getAllPiacturePath(String path)
{
File file = new File(path);
return getName(file);
}
public List<String> getName(File file)
{
File [] fileList = file.listFiles();
for(File myFile : fileList)
{
if(myFile.isDirectory())
{
getName(myFile);
}else
{
//只要知道后缀的图片路径
String fileName = myFile.getName();
String lastName = fileName.substring(fileName.lastIndexOf(".")+1);
//如果图片的后缀为指定的后缀则复制
if(pictureSuffix.contains(lastName))
{
list.add(myFile.getAbsolutePath());
}
}
}
return list;
}
}
/**
* 图片处理
* @author djk
*
*/
class DjkHandlePicture implements HandlePictrue
{
private ValidatePicture validatePicture;
public DjkHandlePicture(ValidatePicture validatePicture)
{
this.validatePicture = validatePicture;
}
/**
* 复制符合条件的图片第一个参数表示符合图片的路径,第二个参数表示图片要复制的目标文件
* @throws Exception
*/
@Override
public void copyPictrue(String sourcePath,String path) throws Exception
{
List<String> list = validatePathPictrue(sourcePath);
if(list.size()>0)
{
File file = new File(path);
if(path.indexOf(".")!=-1)
{
throw new Exception("源路径错误");
}
if(!file.exists())
{
file.mkdirs();
}
}
//复制图片
for(String myList : list)
{
String pictureName = myList.substring(myList.lastIndexOf("\\")+1);
InputStream is = new FileInputStream(new File(myList));
OutputStream os = new FileOutputStream(new File(path+pictureName));
byte [] buffer = new byte[1024];
int length = 0;
while((length = is.read(buffer))!=-1)
{
os.write(buffer, 0, length);
}
is.close();
os.close();
}
}
/**
* 得到符合条件的图片路径
* @return
*/
private List<String> validatePathPictrue(String sourcePath)
{
List<String> list = new ArrayList<String>();
List<String> allPictureList = validatePicture.getAllPiacturePath(sourcePath);
for(String picturePath: allPictureList)
{
if(validatePicture.isSizeInRange(picturePath)&&validatePicture.isSizeOk(picturePath))
{
list.add(picturePath);
}
}
return list;
}
}
enum MyConstatn
{
PICTUREHEIGHT(800),PICTUREWEIGHT(800),PICTRUESIZE(307200);
private int value;
private MyConstatn(int i)
{
this.value = i;
}
public int getValue() {
return value;
}
}
呵呵 lz我刚写的代码你参照下。。。。写的比较仓促里面还有写不足的地方,不过要完成你的功能应该是OK了。。。。