static
void
fileList()
{
File
file=new
File("d:/")
File[]
files
=
file.listFiles()
if
(files
!=
null)
{
for
(File
f
:
files)
{
System.out.println(f.getPath())
}
}
}对此,我们肯定不满足,我们需要遍历D盘下所有的文件和文件夹,而不是根目录下的文件夹,这个时候我们需要使用到递归:public
static
void
fileList(File
file)
{
File[]
files
=
file.listFiles()
if
(files
!=
null)
{
for
(File
f
:
files)
{
System.out.println(f.getPath())
fileList(f)
}
}
}然后在主函数中调用:public
static
void
main(String[]
args)
{
File
file=new
File("d:/")
fileList(file)
}结果是不是能令你满意呢?显然,输出的都是全路径,我们可以对我们的递归函数做如下改进:
public
static
void
fileList(File
file,int
node)
{
node++
File[]
files
=
file.listFiles()
if
(files
!=
null)
{
for
(File
f
:
files)
{
for(int
i=0i<nodei++){
if(i==node-1){
System.out.print("├")
}
else{
System.out.print("
")
}
}
System.out.println(f.getName())
fileList(f,node)
}
}
}然后再次在主函数中调用:public
static
void
main(String[]
args)
{
File
file=new
File("d:/")
fileList(file,0)
}得到的结果是一个类似树状的结构,如果你对此还不满意,可以尝试给JTree上添加节点,可以做到和资源管理器中一样的结构。
首先,我们需要获取磁盘中所有的盘符路径:jdk6中一个方法搞定:
File [] roots = File.listRoots()然后,通过每个路径来进行向下遍历,上代码(手敲,各种小错误别怪我,看思路就好):
import java.io.File/**
由于本人使用了junit,请自行添加main方法测试
*/
public class Test{
@org.junit.Test
public void testfiles(){
File [] roots = File.listRoots()
for(File f:roots){
System.out.println(f.getAbsolutePath())
}
listFiles(roots)
}
public void listFiles(File[] files){
if(files==null||files.length==0)return
for(File f : files){
if(f.isDirectory()){
System.out.println(f.getAbsolutePath())
listFiles(f.listFiles())
}else{
System.out.println("\t|"+f.getName())
}
}
}
}