——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
在使用递归时要注意:
1.限定条件
2.要注意递归的次数,尽量避免内存溢出。
练习一:递归列出目录下的文件或者文件夹,包含子目录中的内容,要求带层次列出。
分析:
因为目录中还有目录,所以只要使用同一个列出目录功能的函数完成即可。如果在列出过程中出现的还是目录的话,还可以再次调用本功能,也即是函数自身调用自身,这种编程方式称为递归。
package OtherIO;
import java.io.File;
public class ListFile {
public static void main(String[] args) {
File file = new File("E:\\WorkSpace");
showDir(file,0);
}
public static void showDir(File dir,int level){
System.out.println(getLevel(level)+dir.getName());
level++;
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++){
if(files[x].isDirectory()){
showDir(files[x],level);
}else{
System.out.println(getLevel(level)+files[x]);
}
}
}
public static String getLevel(int level){
StringBuilder sb = new StringBuilder();
sb.append("|--");
for(int x=0; x<level; x++){
sb.insert(0, " ");
}
return sb.toString();
}
}
练习二:删除一个带内容的目录。
删除原理:
在windows中,删除目录是从里往外删除的,既然是从里往外删除,就要用到递归。
package OtherIO;
import java.io.File;
public class RemoveDir {
public static void main(String[] args) {
File file = new File("D:WorkSpace");
removeDir(file);
}
public static void removeDir(File dir){
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++){
if(files[x].isDirectory()&&!files[x].isHidden()){
removeDir(files[x]);
}else{
files[x].delete();
}
}
dir.delete();
}
}
练习三:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,即建立一个java列表文件。
思路:
1.对指定的目录进行递归。
2.获取递归过程中所有的java文件的路径。
3.将这些路径存储到集合中。
4.将集合中的数据写入到一个文件中。
package OtherIO;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ShowJavaFileList {
public static void main(String[] args) {
File dir = new File("E:\\WorkSpace");
List<File> list = new ArrayList<File>();
List<File> list1 = fileToList(dir,list);
File file = new File(dir,"javalist.txt");
writeToFile(list1, file.toString());
}
public static List<File> fileToList(File dir,List<File> list){
File[] files = dir.listFiles();
for(File file :files){
if(file.isDirectory()){
fileToList(file,list);
}else{
if(file.getName().endsWith(".java"))
list.add(file);
}
}
return list;
}
public static void writeToFile(List<File> list,String listFile){
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(listFile));
for(File file: list){
String path = file.getAbsolutePath();
bufw.write(path);
bufw.newLine();
bufw.flush();
}
} catch (IOException e) {
throw new RuntimeException();
}finally{
try {
if(bufw!=null)
bufw.close();
} catch (IOException e) {
throw new RuntimeException();
}
}
}
}
时间: 2024-10-14 03:24:52