想实现一个这样的功能,有谁能帮我实现呢?满分奉上

zouzouting560 2013-01-28 07:53:31
递归遍历一个文件夹,获取该文件夹下所有图片尺寸为800*800,并且图片大小小于300K的图片。
并且把这些图片复制到一个份,在原有的名字基础上添加一些特殊标记。。
应该怎么实现呢?
...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 chengxu2011 的回复:
Java code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293……
mark下
悲催的程序猿 2013-01-29
  • 打赏
  • 举报
回复
已經有人解決了!
chengxu2011 2013-01-28
  • 打赏
  • 举报
回复
额 呵呵发现自己写的代码还是有点耦合度 ,晚了 下次改吧。。。。
chengxu2011 2013-01-28
  • 打赏
  • 举报
回复
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了。。。。
失落夏天 2013-01-28
  • 打赏
  • 举报
回复
留个脚印,如果明早还没人帮你完成的话我上班的时候写。
zeko075 2013-01-28
  • 打赏
  • 举报
回复
API里关于Image的类里应该有介绍的吧···我猜的···
王者_来归 2013-01-28
  • 打赏
  • 举报
回复
这个功能不难实现吧?给出获取图片宽高的代码: ImageIcon icon = new ImageIcon(String url); int width = icon.getIconWidth(); int height = img.getIconHeight();
  • 打赏
  • 举报
回复
应用程序还是网页

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧