文件相关操作
文件操作类
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;}
/** * 删除给定文件或目录 * @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();}
/** * 文件复制 * @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);}}
/** * 将文件列表分成两类,一类是文件夹,一类是文件。 * @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;}
/** * 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;}}});}}