一. 创建给定路径下的文件
package com.jorian.text.httpClient;
import java.io.File;
import java.io.IOException;
/**
* 创建一个给定路径下的文件
*
*/
public class creatFolder{
//定义 地址,文件名
private String path=null;
private String foldername=null;
//测试代码
public static void main(String[] args){
creatFolder cf=new creatFolder("d:\\","jorian.txt");
cf.creat();
}
//定义构造方法
public creatFolder(String path,String foldername) {
this.path=path;
this.foldername=foldername;}
//定义创造方法
public void creat(){
File file=new File(path,foldername);
file.mkdirs();
}
}
二. 递归手法学习
package com.jorian.text.httpClient;
import java.io.File;
public class FileReadDeapth{
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,直到为1,求和
* @param num
* @return
*/
public static int getNum(int num) {
if(num==1){
return 1;
}
return num+getNum(num-1);
//递归
//System.out.println(num);
}
/**
* 将10进制转为2进制
* @param num
*/
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 com.jorian.text.httpClient;
import java.io.File;
/**
* 需求:对指定的目录进行所有内容的列出(包含子目录中的内容)
* 也可以理解为深度遍历目录
*
*/
public class FileReadDeapth {
//执行程序
public static void main(String[] args) {
//指定起始目录
File dir=new File("D://jorian//JT课件//代码+word");
listAllDir(dir,0);
}
/**
*
* @param dir 起始目录
* @param level 当前层级
*/
public static void listAllDir(File dir,int level) {
System.out.println(getSpace(level)+"|-->"+dir.getName());
//1级下边的所有文件及文件夹
level++;
File []files =dir.listFiles();
//遍历每一个文件或文件夹
for(int i = 0;i<files.length;i++){
//判断是不是文件夹,是文件夹,那就再次调用这个方法,展现下一层文件,自己调用自己方法,把这种编程手法叫做递归
if(files[i].isDirectory()){
listAllDir(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();
}
}
四.递归练习,模拟win系统删除文件的原理
分析需求:删除一个带内容的文件夹
package com.jorian.text.httpClient;
import java.io.File;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class DeleteFile {
/**************
* 删除一个带内容的目录
*
* 原理:必须从里边往外边删
* 需要进行深度遍历
* */
public DeleteFile() {
// TODO Auto-generated constructor stub
}
//执行程序
public static void main(String[] args) throws IOException {
File dir=new File("D:\\demo");
removeDir(dir);//递归手法深度遍历文件夹并删除
}
/**
*
* @param 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());//删除文件夹,注意!采用递归手法,先删除的是最里层的文件夹
}
}