一.创建给定路径下的文件
package java_Studing_day49_IO流_DepthTraversalfolder;
import java.io.File;
import java.io.IOException;
/**
* 创建给定路径下的文件
*
*/
public class creatFolder{
// public static void main(String[] args){
// //测试代码
// creatFolder cf=new creatFolder("d:\\","weraefafe.txt");
// cf.creat();
// }
/**
* 地址,文件名
*/
String path=null;
String foldername=null;
public creatFolder(String path,String foldername) {
this.path=path;
this.foldername=foldername;
}
public void creat(){
File file=new File(path,foldername);
file.mkdirs();
}
}
二. 深度遍历文件夹或者指定目录
package java_Studing_day49_IO流_DepthTraversalfolder;
import java.io.File;
/**
* 需求:对指定的木进行所有内容的列出(包含子目录中的内容)
* 也可以理解为深度遍历
*
*/
public class FileTestDemo {
/**
* @param args
*/
public static void main(String[] args) {
//将指定目录或者文件夹封装成对象
File dir=new File("d:\\sougou");
listAll(dir,0);
}
/****************************深度遍历文件夹或者目录**********************************************************/
public static void listAll(File dir,int level) {
System.out.println(getSpace(level)+"|-->"+dir.getName());
// //获取指定目录下当前的所有文件夹或者文件对象
level++;
File []files =dir.listFiles();
//遍历每一个文件
for(int i = 0;i<files.length;i++){
//判断是不是文件夹,是文件夹,那就再次调用这个方法,自己调用自己方法,把这种编程手法叫做递归
if(files[i].isDirectory()){
listAll(files[i],level);
}else
//不是文件夹就打印出来,加上开始的空挡作为缩进
System.out.println(getSpace(level)+"|-->"+files[i].getName());
}
}
//获取层级level个空挡作为缩进,得到类似win7的目录树效果
private static String getSpace(int level) {
StringBuilder sb=new StringBuilder();
for(int i=0;i<level;i++){
sb.append(" ");
}
return sb.toString();
}
}
三,递归手法的学习
package java_Studing_day49_IO流_DepthTraversalfolder;
public class diguiDemo {
/*************
* 递归:
* 函数自身直接或者间接的调用到了自身
*
* 什么时候用? 一个功能被重复使用,并每次使用时,参与运算的结果和上一次调用有关
* 这时可以用递归解决问题
*
* 注意:
* 1.递归一定要注意条件,否则容易栈溢出
* 2.注意一下递归的次数
*
*
*
* */
public static void main(String[]a ) {
// TODO Auto-generated method stub
//show();调用show时方法不断的进栈但是不出栈,会发生栈内存溢出的异常
//toBin(6);
int sum =getNum(900000);//要注意递归的次数,否则会发生栈内存溢出异常
int sum2=getNum(9);
System.out.println(sum);
System.out.println(sum2);
}
//从某个数开始不断减一,直到为1,求和
public static int getNum(int num) {
if(num==1){
return 1;
}
return num+getNum(num-1);//递归
//System.out.println(num);
}
//将10进制转为2进制
public static void toBin(int num){
if (num>0){
System.out.println(num%2);
toBin( num/2);//将num除以二再调用toBin,递归
}
}
// public static void show(){
//
// show();//直接调用自己
// method();//间接的调用自身
// }
//
// public static void method() {
// show();
//
// }
}
四.递归手法小练习,
需求:删除一个带内容的文件夹
package java_Studing_day49_IO流_DepthTraversalfolder;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class smallPractice {
/**************
* 删除一个带内容的目录
*
* 原理:必须从里边往外边删
* 需要进行深度遍历
*
*
* */
/*********************删除目录的过程******************/
public smallPractice() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws IOException {
File dir=new File("D:\\demo");
smallPracticeDemo();
//removeDir(dir);//递归手法深度遍历文件夹并删除
}
public static void removeDir(File dir) {
File [] files=dir.listFiles();//获取文件目录列表
for(File file:files){//深度遍历目录
if(file.isDirectory()){ //判断没一个目录是否为文件夹
removeDir(file); //若是文件夹,则继续遍历,递归手法
}else{ //若不是文件夹
System.out.println(file+":------"+file.delete()); //删除文件,并打印删除结果
}
}
System.out.println(dir+":-----"+dir.delete());//删除文件夹,注意!采用递归手法,先删除的是最里层的文件夹
}
/**************文件夹的删除顺序探究********************/
private static void smallPracticeDemo() throws IOException {
// TODO Auto-generated method stub
File dir=new File("d:\\myPractice");
File dir1=new File("d:\\myPractice\\myPractice1");
File dir2=new File("d:\\myPractice\\myPractice2");
File file=new File("d:\\myPractice\\myPractice.txt");
dir.mkdir();
dir1.mkdir();
dir2.mkdir();
//file.createNewFile();
//BufferedWriter bfw=new BufferedWriter(new FileWriter("F:\\myPractice\\myPractice.txt"));
//bfw.write("sdfwfsdfedsfsefeadfwfa"+System.lineSeparator()+"sdfwefsdfwefsfesfeasdfe");
//bfw.close();
//file.deleteOnExit();
dir1.delete();//先删除里层
dir2.delete();//先删除里层
dir.delete();//不能直接删除外层文件或者文件目录
}
}