2013-11-13 5 views
0

Редактировать 1Как проверить путь к файлу?

Я застрял на небольшой проблеме, и парень, к которому я обычно обращаюсь, верят или нет, в Австралии на его медовый месяц, насколько это неважно.

Проблема в том, что я работал над попыткой получить boolean, который либо сообщит мне, если путь к файлу правильный, либо нет.

Проблема заключается в том, что она всегда возвращает ложь,

Я попытался следующие примеры данных

c:\Lingerie\ 
    c:\\Lingerie\\ 
    c:\\ 
    c:\ 

Edit

Это экран ввода, который я разработал до сих пор. Я уже думал о наличии лишних пробелов, поэтому я уже вписал команду trim.

enter image description here Все они вернулись с ошибкой. Вот метод, который я использую, и код, который его вызывает.

dbFilePath = (text.getText()).trim(); 
    bool03 = busLog.isFilePath(dbFilePath); 
    System.out.println("The result is " + bool03); 

И метод называется это

public boolean isFilePath(String filePath) { 

    return discreetLog.isFilePathMatched(filePath); 
} 

и который называет

public boolean isFilePathMatched(String myFilePath){ 

    String regularExpression = "([a-zA-Z]:)?(\\\\[a-zA-Z0-9_.-]+)+\\\\?"; 

    Pattern pattern = Pattern.compile(regularExpression); 

    return Pattern.matches(regularExpression, myFilePath); 
} 

Я не знаю, если это мой код или ошибка ввода.

+1

Что вы подразумеваете под «правильным»? На что вы на самом деле проверяете? – Andrew

+0

* ... парень, с которым я обычно обращаюсь, это верят или нет, в Австралии в его медовый месяц, насколько это неважно. Как вы не согласны с тем, что не позволили ему отдохнуть несколько дней! Вернитесь к своей проблеме, если путь существует на ПК или это просто проверка строки? –

+0

Если вы не берете скомпилированный шаблон вне метода в более глобальной области, 'return myFilePath.matches (regularExpression);' достаточно. –

ответ

3

Первый путь вашего образца на самом деле правильно соответствует регулярному выражению.

Чтобы соответствовать второму и четвертому, вы должны разрешить двойную обратную косую черту. Просто добавьте \\\\? справа от предыдущей обратной косой черты в вашем регулярном выражении.

Чтобы соответствовать третьим и четвертым, вам необходимо сделать вторую группу необязательной. В настоящее время он используется с оператором +. Вместо этого используйте *.

Поэтому, если вы замените регулярное выражение с этим:

String regularExpression = "([a-zA-Z]:)?(\\\\\\\\?[a-zA-Z0-9_.-]+)*\\\\?\\\\?"; 

он будет соответствовать всем вашим пути, и больше ничего.

Если вы все еще не можете соответствовать вашим данным образца, тогда есть проблема в другом месте вашего кода. Вы можете попробовать разместить SSCCE.