2015-07-29 3 views
0

Как написать файл свойств в пакете java с использованием класса java в другом пакете.Запись в файл свойств внутри пакета Java

Вот код для записи файла свойств

String filePath1 = "com/...../application.properties"; 
     File applicationProperties = new File(filePath1); 
     FileOutputStream fileOutputStream = new FileOutputStream(applicationProperties); 
     Date todayDate = new Date(); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     properties.setProperty("application.database.backup.date", sdf.format(todayDate)); 
     properties.store(fileOutputStream, "storing index values to properties file"); 
     fileOutputStream.close(); 

Получение файла FileNotFoundException.But это существует в этом package.while чтение этих файлов получить выход.

String filePath = "com/....../application.properties"; 
     InputStream inputStream = getClass().getResourceAsStream(filePath); 
     Properties properties = new Properties(); 
     properties.load(inputStream); 
     if (properties.getProperty("application.grouping.mode") != null || !properties.getProperty("application.grouping.mode").isEmpty()) { 

      String lastBackupDate = properties.getProperty("application.grouping.mode"); 


    } 

Как решить это Исключение.

+1

Является ли ваш каталог 'com' представленным в другом каталоге, например' src' или что-то еще? –

+0

yes.package inside src – User123

+0

Убедитесь, что следующее: 1) есть ли у вас разрешение на запись в файл? 2) Если существует ли правильный путь, указанный в коде выше? имейте в виду, что приведенный выше путь относителен. –

ответ

1

Здесь есть три проблемы, которые связаны между собой. В принципе, вы предполагаете, что получите, потому что вы можете читать с ресурса, вы можете записать в файл в той же структуре папок относительно текущего каталога. Это ошибочное предположение, потому что:

  • Ресурсы не могут быть в файловой системе в качестве отдельных файлов для начала. Например, приложения Java обычно упаковываются в файлы jar. Загрузчик классов умеет читать ресурсы из файла фляги, но структура папок не присутствует на диске

  • Даже если файлы являются на диске в виде отдельных файлов в правой структуре папок, они не могут быть искоренены в рабочем каталоге процесса. Например:

    # Running in /home/jon/Documents 
    $ java -cp /home/jon/java/bin com.foo.bar.SomeApplication 
    

Здесь SomeApplication.class бы в /home/jon/java/bin/com/foo/bar, но new File("com/foo/bar/something.properties") будет ссылаться на /home/jon/Documents/com/foo/bar/something.properties.

И, наконец, даже если вы были, пытаясь написать нужное место, у вас может не быть доступа на запись - очень часто двоичные файлы для приложений хранятся в каталогах только для чтения с разумным обоснованием того, что код и чтение - только данные приложения должны быть отделены от изменяющегося состояния приложения. Помимо всего прочего, это облегчает обновление/ремонт - просто удалите каталог старой версии, зная, что вы не потеряете никаких пользовательских данных.

Ваш контекст не ясен, но я бы посоветовал вам найти подходящий способ передачи имени файла в приложение и написать ему и прочитать его там, где вам нужно.

+0

Можете ли вы привести мне пример кода – User123

+0

@ User123: Из чего? Вы даже не сказали нам, что это за приложение.Все, что я предлагаю, это то, что вы явно указываете свое приложение с именем файла ..., которое может быть через параметры командной строки, конфигурацию сервлета, что бы это ни было ... –

+0

@ User123: Это ничего нам не говорит. Веб приложение? Консольное приложение? Свинг? Как вы его начинаете? Что оно делает? У вас есть другие файлы конфигурации? –

0

Убедитесь, что ваш файл свойств находится в пути класса. после того, что вы должны быть в состоянии загрузить его как

String filePath = "/application.properties"; 
InputStream inputStream = getClass().getResourceAsStream(filePath); 
+0

может загружать свойства, но не может писать свойства – User123

0

Ваш com находится в директории src. Таким образом, ваш путь к файлу должен быть src/com/...... Он должен начинаться с src/, а не com/

Смежные вопросы