0

名前が「_1.xml」で終わるファイルをフォルダー (UNIX ファイルシステム、/home/myuser/myfolder/ を検索しています) に検索したい。svn フォルダーを避けたい: エラーが発生するかどうかわからないので、避けたいのです。彼らが安全だとあなたが保証してくれるなら、私は彼らのことは気にしません。

私のコードは次のとおりです。

/**
 * Searches associated XML file "WHATEVER_id.xml" given an id
 * 
 * @param id
 *            notam id
 * 
 * @return absolute path to XML file
 * 
 */
public String getXMLFileFromID(final int id) {
    String path = null;
    File root;
    try {
        root = new File("/home/myuser/myfolder");
        String[] extensions = {"xml"};
        boolean recursive = true;
        try{
            Collection<File> files = FileUtils.listFiles(root, extensions, recursive);

            for(Iterator<File> iterator = files.iterator(); iterator.hasNext(); ){
                File file = (File) iterator.next();
                if(file.getName().endsWith(Integer.toString(id) + ".xml")){
                    path = file.getAbsolutePath();
                    LoggerFactory.getLogger(FTPDatabase.class).info("getXMLFileFromID : Found associated XML file in " + path);
                    return path;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }

        LoggerFactory.getLogger(FTPDatabase.class).info("getXMLFileFromID : Unable to find XML associated to id " + id);

    } catch (DatabaseException e) {
        LoggerFactory.getLogger(FTPDatabase.class).info("getXMLFileFromID : DatabaseException : " + e.getMessage());
    }
    return path;
}

また、次のように FilenameFilters を試しました。

        File[] matchingFiles = f.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.endsWith(Integer.toString(id) + ".xml");
            }
        });
        if(matchingFiles.length == 1){
            path = matchingFiles[0].getAbsolutePath();
            LoggerFactory.getLogger(FTPDatabase.class).info("getXMLFileFromID : Found associated XML file in " + path);
        }
        else{
            LoggerFactory.getLogger(FTPDatabase.class).info("getXMLFileFromID : Unable to find XML associated to NOTAM id " + id);
        }

とにかく例外が発生しています:

    java.lang.IllegalArgumentException: Parameter 'directory' is not a directoy,
     at org.apache.commons.io.FileUtils.validateListFileParameters (545)
     at org.apache.commons.io.FileUtils.listFiles(521)
     at org.apache.commons.io.FileUtils.listFiles(691)
     at com.core.ftp.FTPDataBase.getXMLFileFromID(227) (that's the FileUtils.listFiles 
line)

     ...

何か助けはありますか?

4

1 に答える 1

1

まだ試していませんが、次のスニペットがニーズに合っているはずです。

public List<File> search(File root, int id) {
    List<File> found = new ArrayList<File>();
    if (root.isFile() && root.getName().endsWith("_" + id + ".xml")) {
        found.add(root);
    } else if (root.isDirectory() && !root.getName().contains("svn")) {
        for (File file : root.listFiles()) {
            found.addAll(search(file, id));
        }
    }
    return found;
}

呼び出し:

List<File> found = search(new File("/home/myuser/myfolder"), 1);
于 2013-01-14T10:39:07.797 に答える