遍历Java中的多个文件夹

时间:2013-03-03 01:28:54

标签: java file file-io traversal

我希望遍历多个文件,直到找到.zip文件或.xml文件

我的文件包含多个文件夹,每个文件夹的末尾都有.zip文件和.xml文件,而有些文件夹甚至可能没有

以下是我的代码:

package Traversefile;

import java.io.File;

public class traversefile {

    /**
     * @param args
     */
    static String[] str1;
    static File dir = new File("/home/evangelist/newdata");
    private static void traverse(File dir) throws NullPointerException{

        if (dir.isDirectory()) 
        {
            String[] children = dir.list();
            for (int i=0; i<children.length; i++) 
            {
                traverse(new File(dir, children[i]));
            }
        }
        if (dir.isFile())
        {
            str1 = dir.list();
        }

        for (int i=0; i<str1.length; i++)
        { 
            System.out.println("filename:"+ str1[i]);
        }
    }

    public static void main(String[] args) {
        traverse(dir);
        // TODO Auto-generated method stub
    }

}

我为检查遍历所做的更改: 包Traversefile;

import java.io.File;

public class traversefile {

/**
 * @param args
 */
static String[] str1;
//static String homePath = System.getProperty("user.home");
static File dir = new File("/home/evangelist/newdata/nnc2/pairtree_root/ar/k+/=1/39/60/=t");
static int counter = 0;
static int kounter = 0;
static int krounter = 0; 
private static void traverse(File dir) throws NullPointerException{

    if(dir.isDirectory())   
   {
       counter ++;

        String[] children = dir.list();
        //System.out.println(children);
        for (int i=0; children != null && i<children.length; i++) 
        {
            //System.out.println(children[i]);
            //System.out.println(" yo + "+ counter );
            traverse(new File(dir,children[i]));

        }
    }
    if (dir.isFile()) 
    {
        krounter++;

        if (dir.getName().endsWith(".xml")) //dir.getName().endsWith(".zip") ||  
        {
            System.out.println(dir.getAbsolutePath());
            //System.out.println(krounter);
        }
    }

}
public static void main(String[] args) {
    traverse(dir);
    // TODO Auto-generated method stub

}

}

它在第27和19行给出了一个零点异常。

如何遍历n个文件夹,最后当我发现.zip znd .xml文件复制其位置时

任何帮助都将得到应用

3 个答案:

答案 0 :(得分:4)

也许这段代码可以帮到你。

private static void traverse(File dir){
    if (dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; children != null && i < children.length; i++) {
            traverse(new File(dir, children[i]));
        }
    }
    if (dir.isFile()) {
        if (dir.getName().endsWith(".zip")
                || dir.getName().endsWith(".xml")) {
            System.out.println(dir.getAbsolutePath());//change it if needed
        }
    }
}

答案 1 :(得分:1)

看起来您正在尝试引用计算机文件系统中的文件。既然如此,你只能说"/home/evangelist/newdata"。首先,您需要通过调用String homePath = System.getProperty("user.home");来获取对主目录的引用然后您可以说static File dir = new File(homePath + "evangelist/newdata");,假设福音传播者是您主目录中的文件夹。

默认情况下,Java假定引用的任何文件都在程序的工作目录中。

答案 2 :(得分:1)

以下代码段错误。一个简单的文件没有子节点,因此list()将返回null。

if (dir.isFile())
        {
            str1 = dir.list();
        }
如果dir是文件,

此处str1将为null。

编辑:链接到java File.list() API。它明确提到如果对象不是目录http://docs.oracle.com/javase/6/docs/api/java/io/File.html#list(),list()将返回null。