Получить файл из относительного пути в Windows - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь получить доступ к .doc файлу из каталога моего проекта.Я получаю ошибку, когда я использую относительный путь в Windows.но он работает нормально, когда я получаю абсолютный путь.

File initialFile = new File("D:\\Demo\\src\\test\\java\\com\\pro\\mockfiles\\My-DOC-FILE.doc");
InputStream uploadStream = new FileInputStream(initialFile);

работает нормально, но,

File initialFile = new File("test/java/com/pro/mockfiles/My-DOC-FILE.doc");
InputStream uploadStream = new FileInputStream(initialFile);

выдает следующую ошибку

java.io.FileNotFoundException: test\java\com\pro\mockfiles\My-DOC-FILE.doc (The system cannot find the path specified)

Я хочу запуститьс относительным путем, вы можете помочь?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Кажется, что вы запускаете свое приложение на любом сервере.
Поэтому, когда вы запускаете его на сервере, приложение будет выбирать путь относительно корневого каталога этого сервера (может быть /bin или что-то еще, в зависимости от вашего сервера).
Когда вы запускаете его как отдельную Java-программу, он принимает путь относительно места выполнения автономной программы.
Так что, если вы хотите запустить его на сервере, укажите путь относительно корневого каталога сервера.
Например: -
File initialFile = new File("<Path after Server root>/test/java/com/pro/mockfiles/My-DOC-FILE.doc");

<Server root> может быть путем после C: / Myserver / bin

0 голосов
/ 03 декабря 2018

Здесь - другое решение, как получить каталог, в котором было запущено приложение:

String current_dir = System.getProperty("user.dir");

После этого абсолютный путь к .doc может быть построено с использованием текущего рабочего каталога:

Paths.get(current_dir, "test/java/com/pro/mockfiles/My-DOC-FILE.doc");

с Paths.get (...)

0 голосов
/ 03 декабря 2018

Событие, хотя относительные пути могут работать в Java, я лично рекомендовал бы не использовать их.Причина в том, что «относительный» путь к файлу изменяется в зависимости от рабочего каталога Java.Если вы запустите приложение из 'c: \ tmp', то относительный путь будет отличаться от того, когда вы запустите его из 'c: \ test'.Даже если приложение находится в «c: \ myApp».

Но если вы хотите использовать его, сначала выясните, откуда были запущены ваши приложения (называемые рабочим каталогом), выполнив код ниже:

 System.out.println(Paths.get("").toAbsolutePath().toString());

После этого измените свой относительный путь в соответствии с разницей между рабочим каталогом и нужным файлом.

В качестве примечания я заметил, что файл хранится в пути к классам.Поэтому вы можете заглянуть в ClassLoader, чтобы получить доступ к файлу, а не использовать файловую систему.Это можно сделать (в случае, если код выполняется в тесте) с помощью следующего кода:

MyClass.class.getClassLoader().getResourceAsStream("/com/pro/mockfiles/My-DOC-FILE.doc");

Этот код является более надежным, поскольку он будет работать независимо от того, откуда запускается приложение.

...