资料相关操作

文件相关操作
文件操作类

1、获得文件夹下所有的文件
/**
	 * 给定路径下的所有目录和文件,包括其子目录下的目录和文件
	 * @param path 给定文件路径
	 * @return 返回给定路径下的所有目录和文件的链表
	 */
	private static void getAllFiles(String path,List<File> list){
		File[] childfiles = getAllChildFiles(path);
		if(childfiles == null || childfiles.length == 0)
			return;
		for(File f:childfiles){
			list.add(f);
			//如果是目录文件,则递归找到其子文件
			if(f.isDirectory())
				getAllFiles(f.getAbsolutePath(),list);
		}
	}
	/**
	 * 获得给定路径下的所有下级目录及其子目录下的所有文件
	 * @param path 给定目录路径
	 * @return
	 */
	public static List<File> listAllFiles(String path){
		List<File> list = new ArrayList<File>();
		getAllFiles(path,list);
		return list;
	}

2、文件删除
/**
	 * 删除给定文件或目录
	 * @param file 给定文件或目录
	 * @return
	 */
	public static void removeFile(File file){
		if(file.isDirectory()){
			File[] files = file.listFiles();
			for(int i=0;i<files.length;i++){
				removeFile(files[i]);
			}
		}
		file.delete();
	}

3、文件复制
/**
	 * 文件复制
	 * @param src 要复制的源文件
	 * @param des 目标文件
	 */
	public static void copyFile(File src,File des){
		try{
			FileInputStream fis = new FileInputStream(src);
			FileOutputStream fos = new FileOutputStream(des);
			FileChannel in = fis.getChannel();
			FileChannel out = fos.getChannel();
			ByteBuffer buf = ByteBuffer.allocateDirect(1024*5);
			while(true){
				buf.clear();
				int r = in.read(buf);
				if(r == -1)
					break;
				buf.flip();
				out.write(buf);
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
	}

/**
	 * 将一个源文件或目录复制文件到一个文件 例如src是"d:\abc",des是"e:\"。则将abc目录复制到"e:\"目录下,生成"e:\abc"。
	 * @param src 源文件或目录
	 * @param des 目标目录
	 */
	public static void copyFileOrDirectory(File src,File des){
		File desfile = new File(des,src.getName());
		if(src.isDirectory()){
			if(desfile.getAbsolutePath().equals(src.getAbsolutePath())){
				desfile = new File(des,src.getName()+" 复件(1)");
				int i=1;
				while(desfile.exists()){
					i++;
					desfile = new File(des,src.getName()+" 复件("+i+")");
				}
			}else if(desfile.getAbsolutePath().startsWith(src.getAbsolutePath()))
				return;
			desfile.mkdir();
			File[] files = src.listFiles();
			for(int i=0;i<files.length;i++){
				copyFileOrDirectory(files[i],desfile);
			}
		}else{
			copyFile(src,desfile);
		}
	}

4、文件分类
/**
	 * 将文件列表分成两类,一类是文件夹,一类是文件。
	 * @param list 文件列表
	 * @return 分类好的文件列表
	 */
	public static List<List<File>> classify(File[] list){
		List<File> dir = new ArrayList<File>();
		List<File> file = new ArrayList<File>();
		List<List<File>> classifyList = new ArrayList<List<File>>();
		classifyList.add(dir);
		classifyList.add(file);
		for(int i=0;i<list.length;i++){
			File f = list[i];
			if(f.isDirectory()){
				dir.add(f);
			}else{
				file.add(f);
			}
		}
		return classifyList;
	}


5、文件排序

/**
	 * SORT_DIRECTORY1是按目录子文件多少升序
	 * SORT_DIRECTORY2是按目录子文件多少降序
	 * SORT_DIRECTORY3是按目录名升序
	 * SORT_DIRECTORY4是按目录名降序
	 */
	public static final int SORT_DIRECTORY1 = 1;
	public static final int SORT_DIRECTORY2 = 2;
	public static final int SORT_DIRECTORY3 = 3;
	public static final int SORT_DIRECTORY4 = 4;
	/**
	 * 将一个目录列表进行排序,排序规则根据传入的排序类型不同而变化
	 * @param dir 需排序的目录列表
	 * @param sortType 排序类型
	 */
	public static void sortDirectory(List<File> dir,int sortType){
		if(sortType ==SORT_DIRECTORY1){
			Collections.sort(dir, new Comparator<File>(){
				public int compare(File o1, File o2) {
					return o2.listFiles().length - o1.listFiles().length;
				}
			});
		}else if(sortType == SORT_DIRECTORY2){
			Collections.sort(dir, new Comparator<File>(){
				public int compare(File o1, File o2) {
					return o1.listFiles().length - o2.listFiles().length;
				}
			});
		}else if(sortType == SORT_DIRECTORY3){
			Collections.sort(dir, new Comparator<File>(){
				public int compare(File o1, File o2) {
					return o1.getName().compareToIgnoreCase(o2.getName());
				}
			});
		}else if(sortType == SORT_DIRECTORY4){
			Collections.sort(dir, new Comparator<File>(){
				public int compare(File o1, File o2) {
					return o2.getName().compareToIgnoreCase(o1.getName());
				}
			});
		}
	}
	/**
	 * SORT_FILE1是按文件名升序
	 * SORT_FILE2是按文件名降序
	 * SORT_FILE3是按文件大小升序
	 * SORT_FILE4是按文件大小降序
	 */
	public static final int SORT_FILE1 = 1;
	public static final int SORT_FILE2 = 2;
	public static final int SORT_FILE3 = 3;
	public static final int SORT_FILE4 = 4;
	public static void sortFile(List<File> file,int sortType){
		if(sortType ==SORT_DIRECTORY1){
			Collections.sort(file, new Comparator<File>(){
				public int compare(File o1, File o2) {
					return o1.getName().compareToIgnoreCase(o2.getName());
				}
			});
		}else if(sortType == SORT_DIRECTORY2){
			Collections.sort(file, new Comparator<File>(){
				public int compare(File o1, File o2) {
					return o2.getName().compareToIgnoreCase(o1.getName());
				}
			});
		}else if(sortType == SORT_DIRECTORY3){
			Collections.sort(file, new Comparator<File>(){
				public int compare(File o1, File o2) {
					if(o1.length()>o2.length()){
						return 1;
					}else if(o1.length()<o2.length()){
						return -1;
					}else{
						return 0;
					}
				}
			});
		}else if(sortType == SORT_DIRECTORY4){
			Collections.sort(file, new Comparator<File>(){
				public int compare(File o1, File o2) {
					if(o1.length()>o2.length()){
						return -1;
					}else if(o1.length()<o2.length()){
						return 1;
					}else{
						return 0;
					}
				}
			});
		}
	}