您的位置:首页 > 编程语言 > Java开发

java文件操作【列出指定目录下的文件】

2009-04-20 20:32 696 查看
package book.io;

import java.io.File;
import java.io.FilenameFilter;

/**
* File类的list方法返回该目录下的所有文件(包括目录)的文件名,文件名不含路径信息
* File类的listFiles方法返回目录下的所有文件(包括目录)的File对象
* FilenameFilter是文件名过滤器接口类,所有自定义的文件名过滤器必须实现该接口的accept方法
* @author Administrator
*
*/
public class ListFileUtil {

/**
* 这是一个内部类,实现了FilenameFilter接口,用于过滤文件
*/
static class MyFilenameFilter implements FilenameFilter{

private String suffix = "";//文件名后缀

public MyFilenameFilter(String suffix){
this.suffix = suffix;
}
public boolean accept(File dir, String name) {

//如果文件名与指定的后缀相同便返回true
if(new File(dir,name).isFile()){
return name.endsWith(suffix);
}
else{
//如果是文件夹
return true;
}
}

}

/**
* 列出目录下所有的文件包括子目录的文件路径
* @param dirName 文件夹的文件路径
*/

public static void listAllFiles(String dirName){

//如果dir不以文件分隔符结尾,自动添加文件分隔符
if(!dirName.endsWith(File.separator)){
dirName = dirName + File.separator;
}

File dirFile = new File(dirName);
//如果dir对应的文件不存在,或者不是一个文件夹则退出
if(!dirFile.exists() || (!dirFile.isDirectory())){
System.out.println("List失败!找不到目录:"+dirName);
return;
}

/*
* list方法返回该目录下的所有文件(包括目录)的文件名,文件名不含路径信息
*
String[] files = dirFile.list();
for(int i = 0; i < files.length; i++){
System.out.println(files[i]);
}
*/

//列出文件夹下所有的文件,listFiles方法返回目录下的所有文件(包括目录)的File对象
File[] files = dirFile.listFiles();
for(int i = 0; i < files.length; i++){
if(files[i].isFile()){
System.out.println(files[i].getAbsolutePath() + " 是文件!");
}
else if (files[i].isDirectory()){
System.out.println(files[i].getAbsolutePath() + " 是目录!");
ListFileUtil.listAllFiles(files[i].getAbsolutePath());
}
}
}

/**
* 列出目录中通过文件名过滤器过滤后的文件
* @param filter 文件名过滤器对象
* @param dirName 目录名
*/
public static void listFilesByFilenameFilter(FilenameFilter filter,String dirName){
//如果dir不以文件分隔符结尾,自动添加文件分隔符
if(!dirName.endsWith(File.separator)){
dirName = dirName + File.separator;
}

File dirFile = new File(dirName);
//如果dir对应的文件不存在,或者不是一个文件夹则退出
if(!dirFile.exists() || (!dirFile.isDirectory())){
System.out.println("List失败!找不到目录:"+dirName);
return;
}

//检查源文件夹下所有能通过过滤器的文件包括子目录
File[] files = dirFile.listFiles(filter);
for(int i = 0; i < files.length; i++){
if(files[i].isFile()){
System.out.println(files[i].getAbsolutePath() + " 是文件!");
}
else if (files[i].isDirectory()){
System.out.println(files[i].getAbsolutePath() + " 是目录!");
ListFileUtil.listFilesByFilenameFilter(filter,files[i].getAbsolutePath());
}
}
}
public static void main(String[] args){
String dir = "d:/soft";
System.out.println(dir + " 目录下的内容:");
ListFileUtil.listAllFiles(dir);

System.out.println(dir + " 经过过滤后的内容:");
//新建一个文件名过滤器,参数为“.exe”
FilenameFilter mf = new ListFileUtil.MyFilenameFilter(".exe");
ListFileUtil.listFilesByFilenameFilter(mf, dir);
}

}

完整例子:

1.ListFiles类能够将目录下的所有文件名写入你指定的文本文件中

package File;

/*
* Created on 2004-12-9
* 我还未发现哪个常用软件中有这个功能,因此写了这个class
* 你可以将光盘中的文件名列在txt文件中,便于将来的查找,或打印出来。
* 不用为了查找某个光盘中的文件而一张一张光盘去找,又慢又损耗光驱。
* 当然也可以选择某个目录,记录下目录下的所有文件名。
*/

/**
* @author Shi Weifeng
* ListFiles类能够将目录下的所有文件名写入你指定的文本文件中。
*/
import java.io.*;
public class ListFiles {
private static String listFileStr="";
public static void main(String[] args) {
try
{
File saveFile=new File(args[1]);
FileWriter fw=new FileWriter(saveFile);
ListFiles lf=new ListFiles();
lf.listFile(args[0]);
fw.write(listFileStr);
fw.close();
}
catch (ArrayIndexOutOfBoundsException ea)
{
//参数提示
System.out.println("Usage: ListFiles <source dir> <target file>");

}
catch (IOException e)
{
System.out.println("IO error!/r/n"+e.toString());
}

}
public void listFile(String rp)
{

File file=new File(rp);
File list[]=file.listFiles();
for(int i=0;i<list.length;i++)
{
try
{
if (list[i].isDirectory())
{
new ListFiles().listFile(list[i].toString());
}
else
{
listFileStr+=list[i].getAbsolutePath()+"/r/n";
System.out.println(list[i].getAbsolutePath());
}
}
catch (Exception ex)
{
listFileStr+="Access deny:"+list[i].getAbsolutePath()+"/r/n";
System.out.println("Access deny:"+list[i].getAbsolutePath());
}
}
}

}

2.列出指定目录及子目录下的所有文件

package File;
import java.io.*;
public class ListAllFilename {

/**
* @param args
*/
public void searchFile(String filename){
try
{
File file=new File(filename);
File result[]=file.listFiles();
for(int i=0;i<result.length;i++){
if(!result[i].isFile()){
searchFile(result[i].toString());
}
else System.out.println(result[i]);
}
}
catch(ArrayIndexOutOfBoundsException ea)
{System.out.println("Usage: ListFiles <source dir> <target file>");}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
ListAllFilename f=new ListAllFilename();
f.searchFile("D://QQDownload");

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: