列出指定目录下文件或者文件夹,包含子目录中的内容。
也就是列出指定目录下所有内容
递归调用
代码:
import java.io.*;
class FileDemo3
{
public static void main(String[] args)
{
File dir = new File("d:\\java0217");
showDir(dir);
}
public static void showDir(File dir)
{
System.out.println(dir);
File[] files = dir.listFiles();//创建listFiles文件对象
for(int x=0; x<files.length; x++)
{
if(files[x].isDirectory())//判断是否为目录
showDir(files[x]);//递归调用
else
System.out.println(files[x]);
}
}
}
----------------------------------------------------------------------------------------------------
删除一个带内容的目录。
删除原理:
在window中,删除目录从里面往外面删除
既然是从里往外删除,就需要用到递归
代码:
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
File dir = new File("d:\\testFile");
removeDir(dir);
}
public static void removeDir(File dir)
{
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++)
{
if(files[x].isDirectory())//判断是否为目录,若是,则递归
removeDir(files[x]);
else
System.out.println(files[x].toString()+":-file-:"+files[x].delete());//输出文件名
}
System.out.println(dir+"::dir::"+dir.delete());//输出目录名
}
}
-------------------------------------------------------------------------------------------------------------
练习:
将一个指定目录下的java文件的绝对路径,存储到一个文本文件中
建立一个java文件列表文件
思路:
1,对指定的目录进行递归
2,获取递归过程所有的java文件路径
3,将这些路径存储到集合中
4,将集合中的数据写入到一个文件中
代码:
import java.io.*;
import java.util.*;
class JavaFileList
{
public static void main(String[] args)throws IOException
{
File dir = new File("d:\\java0217");
List<File> list = new ArrayList<File>();//建立一个集合对象
fileToList(dir, list);
//System.out.println(list.size());
File file = new File(dir, "javalist.txt");
writeToFile(list, file.toString());
}
public static void fileToList(File dir, List<File> list)
{
File[] files = dir.listFiles();
for(File file : files)//增强for循环
{
if(file.isDirectory())
fileToList(file, list);//递归遍历
else
{
if(file.getName().endsWith(".java"))
list.add(file); //符合条件添加到集合中
}
}
}
public static void writeToFile(List<File> list, String javaListFile)throws IOException
{
BufferedWriter bufw = null;
try
{
bufw = new BufferedWriter(new FileWriter(javaListFile));
for(File f : list)
{
String path = f.getAbsolutePath();//获取绝对路径
bufw.write(path);//把路径名称写入文件
bufw.newLine();
bufw.flush();
}
}
catch(IOException e)
{
throw e ;
}
finally
{
try
{
if(bufw!=null)
bufw.close(); //关闭流
}
catch(IOException e)
{
throw e;
}
}
}
}
-------------------------------------------------------------------------
个人总结:递归遍历是自身调用自己,递归要防止内存溢出,
选择指定的文件要用到集合,在递归中判断