1、先来个简单的递归小例题~~~
public class Digui {
//1+2+3+....+100的结果
int sum=0;
/* public void test(int n) {//n=1 升序
sum+=n;//sum=1+2+...99
if(n<100) {
n++; //101
test(n);//自己调用自己的方法(递归)
}
}*/
public void test1(int n) {//n=100 降序
sum+=n;//sum=100+99+...2+1
if(n>1) {
n--; //1
test1(n);//自己调用自己的方法(递归)
}
}
public static void main(String[] args) {
Digui d=new Digui();
d.test(100);
System.out.println(sum);//5050
// d.test(1);
// System.out.println(sum);
}
}
2、正题---找出目录下所有的图片:
import java.io.File;
import java.nio.file.Files;
public class Digui01 {
//找出某个目录下所有的文件
/**
* 递归查询文件,比如,图片,文档
* @param dir 目录
* @param type 文件类型, 多个类型用逗号隔开,如:“jpg,png,pic,bmp...”
*/
public static void FindShowFile(File dir,String type) {
File files[]=dir.listFiles();
if(files!=null && files.length>0) {//文件里面不为空并且大于零,避免了空指针
for (File ff:files) {//遍历目录
if(ff.isFile()) {//文件
/* String fname= ff.getName();
if(fname.indexOf(".")==-1) {
System.out.println(ff.getPath()); //找出没有后缀名的文件
} */
String fname= ff.getName();
int index= fname.indexOf(".");//找出"."第一次出现的位置
if(index!=-1) {
String houzhuiming=fname.substring(index);//截取“.”后面的全部
if(type.contains(houzhuiming)) {//类型是否包含截取的后缀名
System.out.println(ff.getPath());
}
}
}else {//目录 ,递归查找
FindShowFile(ff, type);//ff继续遍历其他目录里面的图片
}
}
}
}
public static void main(String[] args) {
Digui01.FindShowFile(new File("F:\\anzhuo"), ".jpg");//找出此目录下的后缀为".jpg的文件"
}
}
3、完成目录的拷贝,拷贝后删除原目录:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileUtils {
/**
* 文件的拷贝
* @param source 来源,需要拷贝的文件
* @param target 目标,拷贝目的位置
* @return
*/
public static boolean fileCopy(File source,File target) {
BufferedReader br=null;
BufferedWriter bw=null;
try {
br=new BufferedReader(new FileReader(source));//读取文件
File nf=new File(target,source.getName());
bw=new BufferedWriter(new FileWriter(nf));//写入文件
String str=null;
while((str=br.readLine())!=null) {
bw.write(str+"\r\n");
}
bw.flush();//刷新缓冲区
} catch (Exception e) {
e.printStackTrace();
return false;
}finally {
try {
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
return true;
}
/**
* 目录拷贝复制
* @param source 需要拷贝的目录
* @param target 拷贝目的位置
*/
public static void copyDir(File source,File target) {//D:\a\b D:\\animal
File files[]=source.listFiles();
File ndir=new File(target,source.getName());//D:\\animal\\a
if(!ndir.exists()) {//没有目录
ndir.mkdir();//创建目录
}
if(files!=null && files.length>0) {
for(File f:files){
if(f.isFile()) {//拷贝文件 D:\\a\\1.txt D:\\animal\\a
fileCopy(f,ndir);
}else {//目录,递归 D:\a\b D:\\animal\\a
copyDir(f,ndir);
}
}
}
}
/**
* 删除指定目录
* @param dir
*/
public static void delDir(File dir) {
File [] files=dir.listFiles();
if(files!=null && files.length>0) { //非空
for(File f:files){
if(f.isFile()) {
f.delete();//删除文件
}else {//目录
delDir(f);//递归
}
}
}
dir.delete();//直接删除目录
}
public static void main(String[] args) {
// File f1=new File("D:\\a\\b\\c\\d\\1.txt");
// File f2=new File("D:\\a");
// System.out.println(FileUtils.fileCopy(f1, f2));
/*File f1=new File("D:\\a\\b\\c\\d");
File f2=new File("D:\\a");
//创建d目录
f2=new File("D:\\a",f1.getName());
if(!f2.exists()) {
f2.mkdir();
}
//遍历f1目录下文件
File files[]=f1.listFiles();
for(File f:files) {//D:\\a\\b\\c\\d 目录中文件---copy---D:\\a\\d中
FileUtils.fileCopy(f, f2);//文件拷贝
}*/
// FileUtils.copyDir(new File("D:\\a"), new File("D:\\animal"));
FileUtils.delDir(new File("D:\\animal\\a"));
}
}
不对的地方请指正。