【问题标题】:Traverse through multiple Folder in JavaJava遍历多个文件夹
【发布时间】:2013-03-03 01:28:53
【问题描述】:

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

}

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

导入 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 文件时复制它们的位置

任何帮助将不胜感激

【问题讨论】:

  • 第 27 行和第 19 行是什么?
  • traverse(new File(dir, children[i]) -- 19 and for (int i=0; i
  • dir.list() 可能会返回 null 检查 javadoc docs.oracle.com/javase/6/docs/api/java/io/File.html#list() .... if (dir.isFile())str1 = dir.list(); 是一个错误的组合,你不能列出一个文件,你只能列出一个目录。 .. 和 str1 总是被分配一个 null

标签: java file file-io traversal


【解决方案1】:

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

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
        }
    }
}

【讨论】:

  • 这有很大帮助,但由于某种原因,它在查找 .xml 文件时跳过了前几个文件夹......我的遍历函数跳过了几个文件夹,你可能知道的任何原因。跨度>
  • 这可能是因为这些文件不是以“.xml”结尾而是以“.xml”结尾,使用 trim() ex。 getName().trim().endsWith() 或因为您无权列出这些文件。尝试以管理员身份运行它。删除 if(...endwith() 以打印找到的所有文件并检查它们是否存在。我希望这会有所帮助。
【解决方案2】:

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

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

【讨论】:

  • 上述选项并没有真正起作用...... is.Directory 在这里失败
  • @drewmore4 /home/evangelist/newdata 看起来像一个绝对路径(以 / 开头),因此,这应该可以在 java 中引用。如果您引用的是相对路径(不是以 / 开头),那么您必须按照上面建议的方式进行操作。引用 java API “...对于 UNIX 平台,绝对路径名的前缀始终是“/”。相对路径名没有前缀。”
【解决方案3】:

跟随 sn-p 是错误的。一个简单的 File 没有子级,因此,list() 将返回 null。

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

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

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

【讨论】:

  • 没有dir 是一个文件,因为你说if (dir.isFile())
  • @drewmore4 在您的if() 中,您正在检查dir 对象是否为isFile()。如果该条件为真,则进入该块并尝试 list() 文件的子文件夹,这将为您提供 null,因此为 NPE。
  • @BimaleshJha 你是对的,它给了我一个错误,因为如果它遍历,冷杉可能会变成一个文件..所以我改变了它..但是我将如何找到我的解决方案
  • @njack 查看“FilenameFilter”并使用它来仅列出以 .zip 或 .xml 结尾的文件。您可以在 Java 中搜索 FilenameFilter。过滤器的 java API 链接:docs.oracle.com/javase/6/docs/api/java/io/FilenameFilter.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多