Java之文件实用操作(过滤、树形显示、排序)

           欢迎讨论,转载请注明出处!

               昨天在论坛上有一同学在问关于文件排序的问题,这个问题其实不难。也就是通过

          获取文件列表,之后根据文件名或者其他的参数(文件大小,修改日期等等)进行排序而已。

              不过使用Comparable接口有时是不大妙的,这时就要考虑使用Comparator接口了。

         反正是练习嘛,顺道试试实现其他的功能,例如树形结构显示文件。

             先贴下效果图吧:

                    文件过滤的,得到某个目录下的所有文件(过滤掉目录),并排序

            

                 树形结构显示:

             

            好了直接看代码部分吧:        

package com.kiritor.util;

import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 文件的相关操作类
 * 
 * @author Kiritor
 */
public class FileOperation {
	private static String contentPath;
	private static String filePath;
	private static File[] fileList = null;// 保存文件列表,过滤掉目录

	public FileOperation() {

	}

	/** 构造函数的参数是一个目录 */
	public FileOperation(String path) {
		File file = new File(path);
		if (file.isDirectory())
			this.contentPath = path;
		else
			this.filePath = path;
	}
    /**获取文件列表*/
	public static File[] getFiles() {
		if (contentPath == null) {

			File file = new File(filePath);
			fileList = new File[1];
			fileList[0] = file;
			return fileList;
		}
		fileList = new File(contentPath).listFiles(new FileFilter() {
			
			/**使用过滤器过滤掉目录*/
			@Override
			public boolean accept(File pathname) {
				if(pathname.isDirectory())
				{
					return false;
				}else
					return true;
			}
		});
		return fileList;
	}

	/** 对当前目录下的所有文件进行排序 */
	public static File[] sort() {
		getFiles();
		Arrays.sort(fileList, new FileComparator());
		return fileList;
	}
	
	public static void tree(File f, int level) {
		String preStr = "";
		for(int i=0; i<level; i++) {
			preStr += "    ";
		}
		File[] childs = f.listFiles();
		//返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
		for(int i=0; i<childs.length; i++) {
			System.out.println(preStr + childs[i].getName());
			if(childs[i].isDirectory()) {
				tree(childs[i], level + 1);
			}
		}
	}

	// 提供一个"比较器"
	static class FileComparator implements java.util.Comparator<File> {
		@Override
		public int compare(File o1, File o2) {
			// 按照文件名的字典顺序进行比较
			return o1.getName().compareTo(o2.getName());
		}

	}
}
               测试代码:

package com.kiritor.util;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		FileOperation fileOperation = new FileOperation("E:\\");
		File[] files = fileOperation.getFiles();
		fileOperation.sort();
		for (File file : files) {
			System.out.println(file.getName());
		}
        fileOperation.tree(new File("D:\\mysql"), 1);
	}
}
            OK,具体就到这儿,至于其他的文件操作,例如文件复制等就不在实现了。
            欢迎讨论,交流。


你可能感兴趣的:(java,File,文件过滤,树形结构,文件排序)