使用java递归方法遍历指定目录下所有子目录和子文件

klException in thread "main" java.lang.NullPointerException at io9.FileList.tree(FileList.java:20) at io9.FileList.main(FileList.java:8)代码:package io9;import java.io.*; public class FileList { public static void main(String[] args) { File f = new File("d:/dzh2/gh/kl"); System.out.println(f.getName()); tree(f, 1); } // 递归方法 private static void tree(File f, int level) { String preStr = ""; for (int i = 0; i < level; i++) { preStr += "-"; } File[] childs = f.listFiles(); //listFiles()返回目录下的所有文件. for (int i = 0; i < childs.length; i++) { System.out.println(preStr + childs[i].getName()); if (childs[i].isDirectory()) { //isDirectory()判断是否为目录 tree(childs[i], level + 1); } } } }

第1个回答  2011-09-27
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* 读取目录及子目录下指定文件名的路径 并放到一个数组里面返回遍历
* @author zdz8207
*
*/
public class FileViewer {
public static void main(String[] args) {
//List arrayList = FileViewer.getListFiles("d:/com","html",true);

//读取d:/com下的以java 结尾的文件 如有子目录,包含之(后缀名为null则为所有文件)
//List arrayList = FileViewer.getListFiles("d:/com","java",true);

//经试验,后缀不能不填写,否则编译不通过,提示“FileViewer.java:17: 非法的表达式开始”。
//另外后缀为""时的情况需要 增加到IF 里去,否则 后缀为""时,不会显示所有文件
List arrayList = FileViewer.getListFiles("d:/com","",true);
if(arrayList.isEmpty())
{
System.out.println("没有符号要求的文件");
}
else
{
String message = "";
message += "符号要求的文件数:" + arrayList.size() + "\r\n";
System.out.println(message);

for (Iterator i = arrayList.iterator(); i.hasNext();)
{
String temp = (String) i.next();
System.out.println(temp);
message += temp + "\r\n";
}
//将显示的文件路径写到指定的文件里,若文件不存在,则提示IO异常
//java.io.FileNotFoundException: d:\ajax\menu.txt (系统找不到指定的路径。)
//如果 加个文件是否存在的判断,如不存在就在当前目录新建一个,则更好。
appendMethod("d:/menu.txt",message);
}
}
public static List<String> fileList = new ArrayList<String>();

/**
*
* @param path 文件路径
* @param suffix 后缀名
* @param isdepth 是否遍历子目录
* @return
*/
public static List getListFiles(String path, String suffix, boolean isdepth)
{
File file = new File(path);
return FileViewer.listFile(file ,suffix, isdepth);
}

public static List listFile(File f, String suffix, boolean isdepth)
{
//是目录,同时需要遍历子目录
if (f.isDirectory() && isdepth == true)
{
File[] t = f.listFiles();
for (int i = 0; i < t.length; i++)
{
listFile(t[i], suffix, isdepth);
}
}
else
{
String filePath = f.getAbsolutePath();

System.out.println("suffix = "+suffix);
if(suffix =="" || suffix == null)
{
//后缀名为null则为所有文件
System.out.println("----------------");
fileList.add(filePath);
}
else
{
int begIndex = filePath.lastIndexOf(".");//最后一个.(即后缀名前面的.)的索引
String tempsuffix = "";

if(begIndex != -1)//防止是文件但却没有后缀名结束的文件
{
tempsuffix = filePath.substring(begIndex + 1, filePath.length());
}

if(tempsuffix.equals(suffix))
{
fileList.add(filePath);
}
System.out.println("|||||||||||||||||||");
}

}

return fileList;
}

/**
* 方法追加文件:使用FileWriter
* @param fileName
* @param content
*/
public static void appendMethod(String fileName, String content)
{
try
{
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content + "\r\n");
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
本回答被提问者采纳
第2个回答  2011-09-27
排版有个性了..
第3个回答  2011-09-25
注意一下排版再说吧
第4个回答  2011-09-25
判断这个文件夹是否存在

java8 遍历目录下的全部子目录和子目录的子目录,过滤出有大于1张jpg的...
使用递归进行:class T {public static void main(String[] args) {String path = "d:\\\\test\\\\";File filePath = new File(path);if (filePath.isDirectory()) {countJPG(filePath);} else {System.out.println("必须由一个目录开始");}}private static void countJPG(File directory) {f...

java遍历文件夹下所有文件包括子目录及文件放到json中后台代码_百度知 ...
import java.io.File;import net.sf.json.JSON;import net.sf.json.JSONObject;public class fileTest { public static void main(String[] args) throws Exception { File file= new File("你文件夹的路径");showAllFiles(file);} final static void showAllFile(File dir) throws Exception{ F...

JAVA遍历一个文件夹中的所有文件---(递归)
public void traverseFolder2(String path) {File file = new File(path);if (file.exists()) { File[] files = file.listFiles();if (null == files || files.length == 0) { System.out.println("文件夹是空的!");return;} else { for (File file2 : files) { if (file2.isD...

java怎样获得某个目录下所有文件的文件名
如下代码使用递归算法遍历某个目录下的所有文件,并输出文件名 import java.io.File;import java.util.ArrayList;public class FileTest { private static ArrayList<String> filelist = new ArrayList<String>(); public static void main( String[] args ) throws Exception { String fileP...

Java怎么实现扫描多个目录中(包括子目录)的指定文件,并且删除它们?_百度...
思路如下使用递归 public static void de(File f){ File [] b = f.listFiles();\/\/获取包含file对象对应的子目录或者文件 for(int i =0;i

java 统计某个文件夹下所包含的文件和文件夹的个数
listFiles方法返回当前目录内所有文件和子目录的File对象数组。获取其大小即文件和子目录的数量总和。遍历数组,用isDirectory方法检验元素是否为目录,这样就把子目录数出来了。做差就是文件的数量了。哦,你是想继续数子目录的文件数量情况吗?那就再最外面套个递归。

java怎样获得某个目录下所有文件的文件名
package com.readfile;import java.io.File;public class GetAllFiles { public static void main(String[] args) { \/\/路径 这里写一个路径进去 String path="F:\\\\QQ文档";\/\/调用方法 getFiles(path);} \/ 递归获取某路径下的所有文件,文件夹,并输出 \/ public static void getFiles(String ...

java代码 读取一个文件夹下的所有文件夹及里面的文件。
public static void main(String[] args){ File file = new File("c:\\\\tmp\\\\5");Test2 t = new Test2();t.method(file);} public void method(File f){ File[] FList = f.listFiles();for (int i = 0; i < FList.length; i++){ if (FList[i].isDirectory()==true){ m...

Java如何删除文件夹下的子目录及其包含的子文件
下面给你介绍Java删除文件夹下的子目录及其包含的子文件的方法:package com.cn.test1;import java.io.File;public class DeleteAllFiles { \/ param args \/ public static void main(String[] args) { \/\/ TODO Auto-generated method stub String filePath = "e:\\\\fq\\\\";System.out.println("...

java怎么循环读取目录下的文件内容
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)1.不使用递归的方法调用。public void traverseFolder1(String path) { int fileNum = 0, folderNum = 0;File file = new File(path);if (file.exists()) { LinkedList<File> list = new LinkedList<File>();File[] files = file....

相似回答