Я использую Java версию 1.8.0_31.Почему поведение «Path.startsWith» отличается от поведения «String.startsWith» - даже для «Path.getFilename»
Я пытаюсь рекурсивно обращаться к дереву каталогов с помощью интерфейса FileVisitor. Программа должна печатать имя всех файлов в C:/books
, имя файла которого начинается с «Ver». В каталоге C:/books
два файла, который начинается с "Ver", Version.yxy
и Version1.txt
. Я пробовал использовать file.getFileName().startsWith("Ver")
, но это возвращает false.
Я что-то упустил? Вот мой код:
public class FileVisitorTest {
public static void main(String[] args) {
RetriveVersionFiles vFiles = new RetriveVersionFiles();
try {
Files.walkFileTree(Paths.get("c:", "books"), vFiles);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class RetriveVersionFiles extends SimpleFileVisitor<Path> {
public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
System.out.println(file.getFileName().startsWith("Ver") + " "
+ file.getFileName());
if (file.getFileName().startsWith("Ver")) {
//not entering this if block
System.out.println(file);
}
return FileVisitResult.CONTINUE;
}
}
Выход выше код:
false Version.txt
false Version1.txt
Спасибо, звучит логично и работает тоже. Я действительно ссылался на книгу KathySierra для сертификации Java, стр. 515, они приводили пример как, if (file.getFileName(). EndsWith (". Class")) Files.delete (file); ... и кажется, что это проблема. – Nicks
Если я разработал API, я бы не добавил перегрузку с помощью String. Слишком легко сделать эту ошибку. –