2014-03-04 2 views
1

Я искал, но не могу понять, как написать код Java, который принимает в качестве входных данных строку, содержащую подстановочный знак (звездочка), и выводит строку с шаблоном решена.Как разрешить файл подстановочных знаков с помощью Java 7

У меня есть особая ситуация, когда я знаю, что есть 1 или 0 соответствующих спецификаций файлов, поэтому я хотел бы, чтобы возвращаемая строка была допустимым спецификатором или нулевым.

У меня есть пример кода для работы с Files.walkFileTree(), но он не делает именно то, что я хочу. Я хочу, чтобы получить resollved имя файла обратно в виде строки, которые я могу использовать в последующем коде ...

Я просто хочу, чтобы передать код в строку имя файла, который включает звездочку

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

и, наоборот, получали Строка с звездочкой разрешен к 1-му соответствия файла (или нуль):

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

Ну, я не хотел показывать свой текущий код, так как это своего рода дикая охота за гусями, поскольку он не делает то, что я хочу, это просто печать всех файлов, которые соответствуют, вместо того, чтобы возвращать строку, которую я могу использовать позже моя логика. – 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 пожалуйста, воздержитесь от публикации неконструктивных комментариев. Просто игнорируйте парня, и все выигрывают. Кроме того, если этот ответ был полезен, вы можете [отметить его как принятый] (https://stackoverflow.com/help/accepted-answer) с галочкой под кнопкой downvote. – l4mpi

+0

Спасибо, сообщение отредактировано. – user3380152

Смежные вопросы