Пути к файлам в Java (Linux) - PullRequest
       16

Пути к файлам в Java (Linux)

4 голосов
/ 12 ноября 2009

Я создал приложение Java, которое загружает некоторые конфигурации из файла conf.properties, который находится в папке src/.

Когда я запускаю это приложение в Windows, оно отлично работает. Однако, когда я пытаюсь запустить его в Linux, он выдает эту ошибку:

java.io.FileNotFoundException: src/conf.properties (No such file or directory)

Ответы [ 9 ]

6 голосов
/ 12 ноября 2009

Если вы упаковали свое приложение в файл jar, который, в свою очередь, содержит файл свойств, вы должны использовать метод ниже Это стандартный способ распространения Java-программ.

URL pUrl = this.getClass().getResource("/path/in/jar/to/file.properties");

Properties p = new Properties();
p.load(pUrl.openStream());

/ в пути указывает на корневой каталог в файле jar.

5 голосов
/ 12 ноября 2009

вместо

String PROP_FILENAME="src/conf.properties";

использовать

String PROP_FILENAME="src" + File.separator + "conf.properties";

Проверьте API для более подробной информации: http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html

4 голосов
/ 12 ноября 2009

Я бы также проверил ваш текущий рабочий каталог, если ваш путь к этому файлу относительный. Вам просто нужно сделать File test = new File(".");, а затем распечатать канонический путь к этим файлам.

Если вы ссылаетесь на любые другие местоположения, например user.dir или что-то подобное, с помощью System.getProperty (), вам нужно как минимум проверить, что каталог, который вы используете в качестве относительного корня, находится там, где вы думаете есть.

Кроме того, как отмечено Майлз , проверьте косые черты, используемые в качестве разделителей пути к файлу. Хотя вы всегда можете использовать «/», и это работает.

И если вы абсолютно ссылаетесь на путь, у вас возникнут проблемы при переходе между одной ОС на другую, если вы сделаете что-то глупое, например, жестко закодировать местоположения.

2 голосов
/ 12 ноября 2009

Проверьте ваши разрешения. Если вы (или, скорее, пользователь, под которым выполняется Java-процесс) не имеете соответствующих прав для чтения файла, например, вы получите это сообщение об ошибке.

Это типичная проблема миграции Windows -> Linux. Что показывает ls -l src/conf.properties при запуске из приглашения?

Дополнительно проверьте заглавные буквы. Windows не чувствительна к регистру, поэтому, если файл действительно назывался, например, CONF.properties он все равно будет найден, тогда как в Linux эти два файла будут считаться разными.

2 голосов
/ 12 ноября 2009

Что вы хотите сделать, это проверить System.getProperties() и искать file.separator. Статический File.pathSeprator также доставит вас туда.

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

(Если это действительно проблема. Иногда мне нравится получать текущий каталог, просто чтобы убедиться, что каталог, в котором я думаю я работаю, это каталог, в котором я действительно обкатка.)

1 голос
/ 12 ноября 2009

проверь косые черты и двоеточия в моем случае я установил PS1 на следующее значение

PS1 = '\ n [\ e [1; 32 м] $ SYSNAME (\ u) @ [\ e [1; 33 м] \ w [\ e [1; 36 м] (\ d \ T) [!] \ e [0m] \ n \ $ '

я пытаюсь прочитать из env .such как system.getenv

Java выдала исключение

java.lang.IllegalArgumentException: искаженная кодировка \ uxxxx

1 голос
/ 12 ноября 2009

Вам следует проверить рабочий каталог вашего приложения. Возможно, это не тот, который вы предполагаете, и поэтому каталог 'src' отсутствует.

Простая проверка для этого - попробовать абсолютный путь (только для отладки!).

1 голос
/ 12 ноября 2009

Я бы проверил ваши слэши, Windows часто использует '\' vs linux's '/' для путей к файлам.

РЕДАКТИРОВАТЬ: Так как ваш путь выглядит нормально, может быть, права доступа к файлу или путь выполнения приложения отличается?

0 голосов
/ 12 ноября 2009

Попробуйте двойную косую черту, после работы в JBoss мне часто приходилось реорганизовывать код, чтобы использовать двойную косую черту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...