Java实现将指定文件夹内的指定类型的文件归类

这两天在学Java IO流,正好让我产生了将自己的电子书归类的打算,说做就做,Why not?看着自己所学所用能解决生活中的实际问题,是不是很有成就感,那是必须的!

package DepthSearch;

import java.util.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;

public class DepthTraverse {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File dirFile=new File("G:/eBook/");
		FilenameFilter filter=new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				return name.endsWith(".mobi");
			}
		};
		List<File>list=new ArrayList<File>();
		try {
			getFile(dirFile, filter, list);//查找符合条件的文件
			WriteToFile(list);//将查找到的指定格式的文件放入指定的目录中
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public static void getFile(File dir,FilenameFilter filter,List<File>list)throws IOException
	{
		File[]files=dir.listFiles();
		for(File file:files)
		{
			if(file.isDirectory())//是目录则递归查询
				getFile(file, filter, list);
			else {
				if(filter.accept(dir, file.getName()))//是文件则将文件放入list列表中
					list.add(file);
			}
			
		}
	}
	public static void WriteToFile(List<File>list) throws IOException
	{
		String dirString="G:/eBooks/mobi";//将查找到的.mobi格式文件存放于此
		FileInputStream fis=null;
		FileOutputStream fos=null;
		int num=0;
		byte[]bt=new byte[1024];
		try {
			for(File file:list)
			{
				fis=new FileInputStream(file);//读文件
				fos=new FileOutputStream(new File(dirString,file.getName()));//写文件
				System.out.println(file.getAbsolutePath());
				while((num=fis.read(bt))!=-1)
				{
					fos.write(bt, 0, num);
					fos.flush();
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally
		{
			fis.close();
			fos.close();
		}
	}

}


你可能感兴趣的:(递归,实用,IO流,深度优先遍历,归类)