递归遍历所有目录以及子目录的方法 因为工作需要,经常需要使用图片,而且放在不同的文件夹下,所有图片都放在一个大的文件夹下。我想写一个程序,递归遍历所有目录以及子目录,并统计各种图片格式的数量有多少。请各位大神提供一点思路。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 jdk7 nio2 Files walkFileTree 方法 import java.io.File;import java.util.ArrayList;import java.util.List;public class Test { //存放文件路径,若需要,可以得到是哪里的图片 private static List<String> filelist = new ArrayList<String>(); static int png=0; static int gif=0; static int jpg=0; public static void main(String[] args) { getFileList("E:\\tu"); System.out.println(jpg); System.out.println(gif); System.out.println(png); } public static void getFileList(String strPath) { File dir = new File(strPath); File[] files = dir.listFiles(); if (files == null) return; for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { getFileList(files[i].getAbsolutePath()); } else { getFileList(files[i].getAbsolutePath()); String fileName = files[i].getName(); String suffix=fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase(); if("jpg".equals(suffix)){ jpg++; }else if("png".equals(suffix)){ png++; }else if("gif".equals(suffix)){ gif++; } } } }} public void showAllFiles(File dir) throws Exception{ File[] fs = dir.listFiles(); CompressPicDemo mypic = new CompressPicDemo(); for(int i=0; i<fs.length; i++){ System.out.println(fs[i].getAbsolutePath()); if(fs[i].isDirectory()){ try{ showAllFiles(fs[i]); }catch(Exception e){ e.printStackTrace(); } }else{ if(fs[i].getAbsolutePath().contains(".jpg")){ jpgnum++; }else if(fs[i].getAbsolutePath().contains(".gif")){ gifnum++; } } } } public void loopDir(File file){ File[] files = file.listFiles(); for(File f : files){ if(f.isDirectory()){ loopDir(f); }else if(f.isFile()){ //分别累加不同格式图片个数 } } } 楼上都不错啊,都有代码了,我就来个没代码的吧,说下我的思想楼主需要的是各种格式的图片统计,所以我觉得用if写死格式去判断不太好应该是拿到文件名称,取出后缀,然后存成map格式,map的key就是后缀,map的值就是数量,这样不但能够统计所有的格式图片,程序也将变得非常简洁,设置图片个数也方便,每次加1就可以了 这个有点不靠谱,文件名是.jpg.gif的怎么办? 、以"."分割,取最后一段进行判断。理论上我的程序肯定有问题,但是实际应用应该不会出现这样的问题,因为实际应用中很少会有图片会有.jpg.gif这样的名字,对么? 你怎么知道不能用.jpg.gif命名,131316545465.jpg.gif,这样的命名谁敢说不合法。 把这个图片载下来看看什么命名。http://imgsrc.baidu.com/forum/w%3D580/sign=ae934ff04b36acaf59e096f44cd88d03/5d6034a85edf8db1ae6f70ad0923dd54574e74b1.jpg 好吧。。。问一个比较简单的问题。。。。 菜鸟问题 Java调用存储过程 没反应 java编写记事本程序怎么实现状态栏 求一正则表达式 怎样设置执行路径 打包问题 春节快乐!关于jdk5.0的Type safety: The cast from Object to HashMap<String,Object> is actually 请问各们大哥大姐们,APPLET最大可以有多少M啊,当然指的是在浏览时速度的前提下了 timer問題,請教 请各位大虾推荐一下基本学习JAVA的入门书籍,我很菜一点都不会! JDialog的构造方法中的owner是什么意思 java程序问题求解答
import java.util.ArrayList;
import java.util.List;public class Test {
//存放文件路径,若需要,可以得到是哪里的图片
private static List<String> filelist = new ArrayList<String>();
static int png=0;
static int gif=0;
static int jpg=0; public static void main(String[] args) {
getFileList("E:\\tu");
System.out.println(jpg);
System.out.println(gif);
System.out.println(png);
} public static void getFileList(String strPath) {
File dir = new File(strPath);
File[] files = dir.listFiles();
if (files == null)
return;
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
getFileList(files[i].getAbsolutePath());
} else {
getFileList(files[i].getAbsolutePath());
String fileName = files[i].getName();
String suffix=fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();
if("jpg".equals(suffix)){
jpg++;
}else if("png".equals(suffix)){
png++;
}else if("gif".equals(suffix)){
gif++;
}
}
}
}
}
public void showAllFiles(File dir) throws Exception{
File[] fs = dir.listFiles();
CompressPicDemo mypic = new CompressPicDemo();
for(int i=0; i<fs.length; i++){
System.out.println(fs[i].getAbsolutePath());
if(fs[i].isDirectory()){
try{
showAllFiles(fs[i]);
}catch(Exception e){
e.printStackTrace();
}
}else{
if(fs[i].getAbsolutePath().contains(".jpg")){
jpgnum++;
}else if(fs[i].getAbsolutePath().contains(".gif")){
gifnum++;
}
}
}
}
File[] files = file.listFiles();
for(File f : files){
if(f.isDirectory()){
loopDir(f);
}else if(f.isFile()){
//分别累加不同格式图片个数
}
}
}
以"."分割,取最后一段进行判断。
理论上我的程序肯定有问题,但是实际应用应该不会出现这样的问题,因为实际应用中很少会有图片会有.jpg.gif这样的名字,对么?