2014-03-04 47 views
1

我已經搜查解決通配符文件規範,但似乎無法弄清楚如何編寫Java代碼,作爲輸入包含通配符(星號)的字符串,並用通配符輸出字符串解決。如何使用Java 7

我有一種特殊的情況,我知道有1或0匹配filespecs,所以我想有返回的字符串或者是一個有效的文件規範,或空。

我已經得到了一些示例代碼中使用Files.walkFileTree()工作,但它不這樣做正是我想要的。我想獲得resollved文件名後面的字符串,我可以在後面的代碼使用...

我只是想通過一些代碼的字符串的文件名,其中包括星號

e.g.: input this String: filename*.tr 

,並得到一個String與星號解析到第一個匹配的文件名(或空):

e.g.: get back this String: filename_201402041230.tr 

這些文件駐留包含幾千個文件,所以遍歷目錄中的所有文件,並解析名稱自己是不是一個目錄吸引人的選擇

任何幫助或指針將不勝感激。

爲爆發而道歉...感謝提示...以下是我之前嘗試的: 但是,正如我所說的,這不是我想要的,但它距離我的研究中儘可能近。

Path startDir = Paths.get("C:\\huge_dir");           
String pattern = "filename*.tr";             

FileSystem fs = FileSystems.getDefault();           
final PathMatcher matcher = fs.getPathMatcher("glob:" + pattern);     

FileVisitor<Path> matcherVisitor = new SimpleFileVisitor<Path>()     
{                     
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attribs) 
    {                     
    Path name = file.getFileName();             
    if (matcher.matches(name))              
    System.out.println(file);              
    return FileVisitResult.TERMINATE;             
    }                     
};                     
try                     
    {                     
    Files.walkFileTree(startDir, matcherVisitor);          
    }                     
catch (Exception e){System.out.println(e);}           
+0

添加示例代碼,以便人們可以看到你已經嘗試什麼,你要去哪裏錯了。我並沒有低估這一點,但我認爲別人可能會這樣做,因爲這聽起來像是你在這裏鍵入你的家庭作業。 – RacerNerd

+0

嗯,我不想證明我當前的代碼,因爲它是一種白費力氣的,因爲它沒有做我想要的東西,它只是的println-ING相匹配的所有文件,而不是返回一個字符串,我可以在以後使用我的邏輯。 – user3380152

+0

然而,如果它有用的話,這裏是: – user3380152

回答

1

可以使用NIO2 Files.newDirectoryStream方法有一個額外的模式匹配匹配的模式,只有列表文件。由於您的字符串已經是glob模式,你可以把它作爲第二個參數:

String pattern = "filename*.tr" 
try (DirectoryStream<Path> ds = Files.newDirectoryStream(dir, pattern)) { 
    //iterate over all matching files 
    List<Path> paths = new ArrayList<>(); 
    for (Path path : ds) { 
     paths.add(path); 
    } 
    if (paths.isEmpty()) { 
     //no file found 
    } else if (paths.size() == 1) { 
     //found one result 
     Path result = paths.get(0) //now do whatever 
    } else { 
     //more than one match - probably an error in your case? 
    } 
} 
+0

@RacerNerd沒有跡象表明這是功課,因爲它不是那麼容易得到正確的(有針對的Java6及以下,所以你必須知道搜索要麼NIO2或特定類別太多的教程),我想我會回答它。另外,OP提到嘗試'Files.walkFileTree',我認爲這是一種嘗試,儘管在這種情況下它沒有那麼有用。 – l4mpi

+0

@ user3380152請避免發佈無建設性的評論。簡單地忽略那個人,每個人都會贏。此外,如果此答案有幫助,則可以在downvote按鈕下方選中該複選標記[將其標記爲已接受](https://stackoverflow.com/help/accepted-answer)。 – l4mpi

+0

謝謝,帖子已被編輯。 – user3380152

相關問題