资料相关操作
文件相关操作
文件操作类
1、获得文件夹下所有的文件
2、文件删除
3、文件复制
4、文件分类
5、文件排序
文件操作类
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; } } }); } }