1

我希望遍历多个文件,直到找到 .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;

导入java.io.File;

公共类遍历文件{

/**
 * @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 文件时复制它们的位置

任何帮助将不胜感激

4

3 回答 3

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
        }
    }
}
于 2013-03-03T02:21:09.150 回答
1

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

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

于 2013-03-03T01:38:21.580 回答
1

以下片段是错误的。一个简单的 File 没有孩子,因此,list()将返回 null。

if (dir.isFile())
        {
            str1 = dir.list();
        }

str1如果 dir 是一个文件,这里将为空。

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

于 2013-03-03T01:39:57.927 回答