一. 建立給定路徑下的檔案
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());//删除檔案夾,注意!采用遞歸手法,先删除的是最裡層的檔案夾
}
}