Почему работа с родительской папкой File возвращает null или NoSuchFileException?
Я хочу получить родительскую папку файла, перечислить все его файлы и вернуть их как вектор. К сожалению, когда я пытаюсь создать поток каталога, я получаю исключение NoSuchFileException. Я немного в темноте, потому что несколько строк выше, я получил доступ к этой папке через file.getParent()
и даже перечислил это путь. Я могу создать изображение из file
и получить его высоту, чтобы наверняка я получил доступ к правильному каталогу. Может кто-нибудь сказать мне, что происходит?
private Vector<File> getFiles() {
File file = new File("sample/emot1.jpg");
System.out.println("File path: " + file.getPath() + " File name: " + file.toString());
Image image = new Image(file.getPath());
System.out.println("Loaded image's height: " + image.getHeight());
File fileParent = file.getParentFile();
System.out.println("Parent file path: " + fileParent.getPath() + " Parent file name: " + fileParent.toString());
Path dir = Paths.get(fileParent.getPath());
Vector<File> files = new Vector<>();
try {
DirectoryStream<Path> pathStream = Files.newDirectoryStream(dir);
for (Path path : pathStream) {
files.add(path.toFile());
}
} catch (IOException e) {
e.printStackTrace();
}
return files;
}
Я пытался перечислить файл папки через file.listFiles()
метод, но он вернулся null
изменилось getPath()
в getAbsolutePath()
но исключение было брошено в любом случае. Я использую Ubuntu и читаю, что это может быть проблема с разрешениями, но у меня нет проблем с доступом к этим файлам - я даже могу перечислить содержимое каждого отдельного файла этой папки через мое приложение, но только при использовании прямого пути.
Трассировка стека исключений:
java.nio.file.NoSuchFileException: sample
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsDirectoryStream.<init>(WindowsDirectoryStream.java:86)
at sun.nio.fs.WindowsFileSystemProvider.newDirectoryStream(WindowsFileSystemProvider.java:518)
at java.nio.file.Files.newDirectoryStream(Files.java:457)
at sample.Controller.getFiles(Controller.java:36)
at sample.Controller.initialize(Controller.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at sample.Main.start(Main.java:13)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:748)