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

次のスニペットは間違っています。単純な File には子がないため、list()null が返されます。

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

dir がファイルの場合、ここstr1は null になります。

File.list()編集: Java APIへのリンク。オブジェクトがディレクトリhttp://docs.oracle.com/javase/6/docs/api/java/io/File.html#list()でない場合、 list() は null を返すことが明確に述べられています。

于 2013-03-03T01:39:57.927 に答える
1

コンピュータのファイル システム内のファイルを参照しようとしているようです。ならば、としか言いようがない"/home/evangelist/newdata"。まず、 を呼び出してホーム ディレクトリへの参照を取得する必要がありString homePath = System.getProperty("user.home");ますstatic File dir = new File(homePath + "evangelist/newdata");

デフォルトでは、Java は、参照されるすべてのファイルがプログラムの作業ディレクトリにあると想定します。

于 2013-03-03T01:38:21.580 に答える