Я хочу получить файл из папки проекта, используя "класс файла", как я могу это сделать?
File file=new File("x1.txt");
Я хочу получить файл из папки проекта, используя "класс файла", как я могу это сделать?
File file=new File("x1.txt");
Ну, есть много разных способов получить файл на Java, но это общий смысл.
Не забывайте, что вам нужно обернуть это внутри try {} catch (Exception e){}
, по крайней мере, потому что File является частью java.io
, что означает, что у него должен быть блок try-catch.
Не наступать на вопрос Эриксона, но если вы используете фактические пакеты, у вас будут проблемы с местоположением файлов, если вы явно не используете его. Относительный путь перепутался с пакетами.
т
src/
main.java
x.txt
В этом примере использование File f = new File("x.txt");
внутри main.java
приведет к исключению, не найденному в файле.
Однако использование File f = new File("src/x.txt");
будет работать.
Надеюсь, что это поможет!
Это похоже на то, что файл встроен в ваше приложение.
Вы должны использовать getClass().getResource("/path/to/your/resource.txt")
, который возвращает URL
или getClass().getResourceAsStream("/path/to/your/resource.txt");
Если это не встроенный ресурс, вам нужно знать относительный путь из контекста выполнения приложения, где существует ваш файл
Если вы не указали какой-либо путь и не поместили только файл (так же, как вы это делали), каталог по умолчанию всегда является одним из ваших проектов (он не находится внутри папки "src" ). Он находится только внутри папки вашего проект).
Если вы пытаетесь загрузить файл, который не находится в том же каталоге, что и ваш класс Java, вы должны использовать структуру каталогов среды выполнения, а не ту, которая появляется во время разработки.
Чтобы узнать, какова структура каталога времени выполнения, проверьте каталог {root project dir}/target/classes. Этот каталог доступен через "." URL.
Исходя из ответа user4284592, у меня сработало следующее:
ClassLoader cl = getClass().getClassLoader();
File file = new File(cl.getResource("./docs/doc.pdf").getFile());
со следующей структурой каталогов:
{root dir}/target/classes/docs/doc.pdf
Вот объяснение, чтобы вы не просто слепо копировали и вставляли мой код:
Эти строки работали в моем случае,
ClassLoader classLoader = getClass().getClassLoader();
File fi = new File(classLoader.getResource("test.txt").getFile());
предоставлен файл test.txt внутри src
в javaFx 8
javafx.scene.image.Image img = new javafx.scene.image.Image("/myPic.jpg", true);
URL url = new URL(img.impl_getUrl());
Для файла application.yaml
в test/resources
ll src/test/resources/
total 6
drwxrwx--- 1 root vboxsf 4096 Oct 6 12:23 ./
drwxrwx--- 1 root vboxsf 0 Sep 29 17:05 ../
-rwxrwx--- 1 root vboxsf 142 Sep 22 23:59 application.properties*
-rwxrwx--- 1 root vboxsf 78 Oct 6 12:23 application.yaml*
-rwxrwx--- 1 root vboxsf 0 Sep 22 17:31 db.properties*
-rwxrwx--- 1 root vboxsf 618 Sep 22 23:54 log4j2.json*
В тестовом контексте я могу получить файл с
String file = getClass().getClassLoader().getResource("application.yaml").getPath();
который фактически укажет на файл в test-classes
ll target/test-classes/
total 10
drwxrwx--- 1 root vboxsf 4096 Oct 6 18:49 ./
drwxrwx--- 1 root vboxsf 4096 Oct 6 18:32 ../
-rwxrwx--- 1 root vboxsf 142 Oct 6 17:35 application.properties*
-rwxrwx--- 1 root vboxsf 78 Oct 6 17:35 application.yaml*
drwxrwx--- 1 root vboxsf 0 Oct 6 18:50 com/
-rwxrwx--- 1 root vboxsf 0 Oct 6 17:35 db.properties*
-rwxrwx--- 1 root vboxsf 618 Oct 6 17:35 log4j2.json*
Просто сделал быстрый поиск в Google и обнаружил, что
System.getProperty("user.dir");
возвращает текущий рабочий каталог как String. Поэтому, чтобы получить файл из этого, просто используйте
File projectDir = new File(System.getProperty("user.dir"));
String path = System.getProperty("user.dir")+"/config.xml";
File f=new File(path);