操作文件的小问题
请问在a文件夹中有a1,a2,a3三个文件夹,每个文件夹中又有5个文件夹分别为
a11……a15;a21……a25;a31……a35,下面的每个文件夹中有一些文件,怎么编写程序可以遍历所有文件夹进入到每个底层文件夹中如a11中,再调用程序处理?
------解决方案--------------------和你的要求差不多。也是遍历c盘下的所有文件
import java.io.*;
public class FindDirectories
{
public static void main(String[] args)
{
// if no arguments provided, start at the parent directory
FindDirectories.FindFiles(new String[]{ "c:\\ "});
}
public static void FindFiles(String[]str)
{
if (str.length ==0) str = new String[]{ ".. "};
try
{
File pathName = new File(str[0]);
if (pathName.exists() )
{
String[] fileNames = pathName.list();
// enumerate all files in the directory
for (int i = 0; i < fileNames.length; i++)
{
File f = new File(pathName.getPath(), fileNames[i]);
// if the file is again a directory, call the main method recursively
if (f.isDirectory())
{
// System.out.println(f.getCanonicalPath());
FindFiles(new String[]{f.getCanonicalPath()});
}
else
{
System.out.println(f.getCanonicalPath());
}
}
}
}
catch(
IOException e)
{
e.printStackTrace();
}
}
}
------解决方案--------------------你说这个功能jdk已经实现了,好好看看java.io.File类的api文档。
这个类可以判断当前对象是directory还是file,如果是directory那么可以获得所有它的子节点(包括file和directory),这样递归处理就可以了。
------解决方案--------------------File file = new File( "c:\\ ");
File[] subFiles = file.listFiles();
for(int i = 0; i < subFiles.length; i ++){
if(subFiles[i].isDirectory()){ //是目录
File[] subFiles2 = subFiles[i].listFiles();
for(int j = 0; j < subFiles2.length; j++ ){
....
}
}
}
层次少的话可以这样写的,如果层次太多就用递归来写
------解决方案--------------------楼上的代码太长了,我的这个好像短一点
import java.io.File;
public class getdirtree {
public getdirtree() {
this.getfiletree( "d:\\temp ");
}
public void getfiletree(String filepath){
File f=new File(filepath);
String[] list=f.list();
for (int i=0;i <list.length;i++){
File ff=new File(filepath+ "\\ "+list[i]);
if (ff.isDirectory()){
this.getfiletree(filepath+ "\\ "+list[i]);
}
System.out.println(filepath+ "\\ "+list[i]);
}
}
public static void main(String[] args) {
new getdirtree();
}
}
------解决方案--------------------file.getParentFile().getName()