1

Unix cliのこのコマンドには、Javaで同等の動作が必要です。

ls /data/archive/users/*/*.xml

これは私を出力します:

/data/archive/users/2012/user1.xml
/data/archive/users/2013/user2.xml

Java 6の単純な同等の実装はありますか?

4

4 に答える 4

2

を使用してユーザー入力を取得し、メソッドをjava.util.Scanner使用java.io.File.listFiles(FilenameFilter)して、特定のフィルターを使用してフォルダー内のファイルのリストを取得します。

于 2013-03-27T12:06:01.253 に答える
0

はい、あります。それはクラスのlistメソッドと呼ばれます。File詳細については、 Javadocを参照してください。

于 2013-03-27T12:03:38.547 に答える
0

これがどこから来たのか忘れましたが、これは良いスタートになるはずです。Google経由で利用できるものは他にもたくさんあります。

public class RegexFilenameFilter implements FilenameFilter {
  /**
   * Only file name that match this regex are accepted by this filter
   */
  String regex = null; // setting the filter regex to null causes any name to be accepted (same as ".*")

  public RegexFilenameFilter() {
  }

  public RegexFilenameFilter(String filter) {
    setWildcard(filter);
  }

  /**
   * Set the filter from a wildcard expression as known from the windows command line
   * ("?" = "any character", "*" = zero or more occurances of any character")
   *
   * @param sWild the wildcard pattern
   *
   * @return this
   */
  public RegexFilenameFilter setWildcard(String sWild) {
    regex = wildcardToRegex(sWild);

    // throw PatternSyntaxException if the pattern is not valid
    // this should never happen if wildcardToRegex works as intended,
    // so thiw method does not declare PatternSyntaxException to be thrown
    Pattern.compile(regex);
    return this;
  }

  /**
   * Set the regular expression of the filter
   *
   * @param regex the regular expression of the filter
   *
   * @return this
   */
  public RegexFilenameFilter setRegex(String regex) throws java.util.regex.PatternSyntaxException {
    this.regex = regex;
    // throw PatternSyntaxException if the pattern is not valid
    Pattern.compile(regex);

    return this;
  }

  /**
   * Tests if a specified file should be included in a file list.
   *
   * @param dir the directory in which the file was found.
   *
   * @param name the name of the file.
   *
   * @return true if and only if the name should be included in the file list; false otherwise.
   */
  public boolean accept(File dir, String name) {
    boolean bAccept = false;

    if (regex == null) {
      bAccept = true;
    } else {
      bAccept = name.toLowerCase().matches(regex);
    }

    return bAccept;
  }

  /**
   * Converts a windows wildcard pattern to a regex pattern
   *
   * @param wild - Wildcard patter containing * and ?
   *
   * @return - a regex pattern that is equivalent to the windows wildcard pattern
   */
  private static String wildcardToRegex(String wild) {
    if (wild == null) {
      return null;
    }
    StringBuilder buffer = new StringBuilder();

    char[] chars = wild.toLowerCase().toCharArray();

    for (int i = 0; i < chars.length; ++i) {
      if (chars[i] == '*') {
        buffer.append(".*");
      } else if (chars[i] == '?') {
        buffer.append('.');
      } else if (chars[i] == ';') {
        buffer.append('|');
      } else if ("+()^$.{}[]|\\".indexOf(chars[i]) != -1) {
        buffer.append('\\').append(chars[i]); // prefix all metacharacters with backslash
      } else {
        buffer.append(chars[i]);
      }
    }

    return buffer.toString();
  }
}
于 2013-03-27T12:04:46.170 に答える
0

これが私が使用したコードです。相対パスと絶対パスで機能します。

DirectoryScanner scanner = new DirectoryScanner();  
if (!inputPath.startsWith("/") || inputPath.startsWith(".")) {  
    scanner.setBasedir(".");  
}  
scanner.setIncludes(new String[]{inputPath});  
scanner.setCaseSensitive(false);  
scanner.scan();  
String[] foundFiles = scanner.getIncludedFiles();

(org.apache.tools.antのDirectoryScanner)

于 2013-04-01T15:11:04.080 に答える