Отримати файл з папки java

Я хочу отримати файл з папки проекту за допомогою "Файл клас", Як я можу це зробити?

File file=new File("x1.txt");
20
Яку помилку ви отримали, коли ви пробували вказаний вище код?
додано Автор Taryn East, джерело
Так. Щось таке.
додано Автор Tim Bender, джерело

9 Відповіді

Ну, є багато різних способів отримати файл на Java, але це загальний зміст.

Не забувайте, що вам доведеться, щонайменше, обернути його в try {} catch (Exception e) {} , оскільки файл є частиною java.io це означає, що він повинен мати блок try-catch.

Щоб не переходити на запитання Ericson, але якщо ви використовуєте фактичні пакунки, у вас виникнуть проблеми з розташуванням файлів, якщо ви явно не використовуєте його розташування. Відносні шляхи переплутаються з пакетами.

тобто

src/
    main.java
    x.txt

У цьому прикладі за допомогою File f = new File ("x.txt"); всередині main.java буде вилучено виняток, який не буде знайдено.

Однак, за допомогою File f = new File ("src/x.txt"); буде працювати.

Сподіваюся, що це допоможе!

20
додано
Сам файл File не викидає жодного IOException . Деякі з цих методів виконуються, але просто створення об'єкта File не вимагає try-catch ... Також поганою ідеєю є посилання на src каталог, оскільки він не буде доступний, коли додаток буде побудовано і розгорнуто.
додано Автор MadProgrammer, джерело

Це схоже на те, що файл вбудовано у вашу програму.

You should be using getClass().getResource("/path/to/your/resource.txt"), which returns an URL or getClass().getResourceAsStream("/path/to/your/resource.txt");

Якщо це не вбудований ресурс, то вам потрібно знати відносний шлях від контексту виконання вашої програми до того, де існує ваш файл

9
додано
Ви повинні дивуватися голосу сліпого голосу - яким чином це не відповідає на питання ОП? Яким чином вона може бути покращена? Нічого не сказано, нічого не змінилося
додано Автор MadProgrammer, джерело

Якщо ви не вказуєте будь-який шлях і не покладете тільки файл (так само, як ви це зробили), каталог за замовчуванням завжди є одним з ваших проектів (це не в папці "src". Це просто всередині папки вашого проекту).

8
додано

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

Щоб дізнатися, що таке структура каталогів runtime, перевірте ваш {root project dir}/каталог target/classes. Цей каталог доступний через "." URL.

На підставі відповіді користувача4284592 для мене працювало наступне:

ClassLoader cl = getClass().getClassLoader();
File file = new File(cl.getResource("./docs/doc.pdf").getFile());

з наступною структурою каталогу:

{root dir}/target/classes/docs/doc.pdf

Сподіваюся, що це допоможе кожному, хто намагається зрозуміти логіку URL.

5
додано
Отже, у моїй відповіді вище, файл "doc.pdf" повністю виходить за межі пакета. У такому пакунку буде розташування, подібне до цього: {root dir} /src/main/java/com/chris/n/whateverMyClassNameIs.java
додано Автор Chris Neve, джерело
Чи буде це працювати для файлів поза пакетом? Тільки в тій же теці проекту, наприклад?
додано Автор Schütze, джерело

Ці лінії працювали в моєму випадку,

ClassLoader classLoader = getClass().getClassLoader();
File fi = new File(classLoader.getResource("test.txt").getFile());

наданий файл test.txt всередині src

2
додано

Просто зробив швидкий пошук Google і знайшов, що

System.getProperty("user.dir");

повертає поточний робочий каталог як String. Таким чином, щоб отримати файл з цього, просто використовувати

File projectDir = new File(System.getProperty("user.dir"));
1
додано
String path = System.getProperty("user.dir")+"/config.xml";
File f=new File(path);
1
додано

Given a file application.yaml in 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(); 

which will actually point to the file in 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*
0
додано

у javaFx 8

javafx.scene.image.Image img = new javafx.scene.image.Image("/myPic.jpg", true);

URL url = new URL(img.impl_getUrl());
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників