Невозможно редактировать файл свойств, загруженный через Class.getResource () - PullRequest
0 голосов
/ 13 декабря 2011

Я пытаюсь написать метод, который будет читать файл свойств с помощью Class.getResource (), вносить изменения в его значения и сохранять файл.

public void saveDBConnectionValues(String user, String password, String host, int port) throws IOException, URISyntaxException
{
    Properties dbProperties = new Properties();

    File f = new File(this.getClass().getResource("db.properties").toURI());

    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f))));     

    dbProperties.load(reader);

    reader.close();

    dbProperties.setProperty("user", user);
    dbProperties.setProperty("pw", password);
    dbProperties.setProperty("host", host);
    dbProperties.setProperty("port", Integer.toString(port));

    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f)))

    dbProperties.store(writer, null);

    writer.close();

}

Мой файл db.propertiesпрочитайте правильно, но, похоже, метод store здесь не работает.Может кто-нибудь объяснить, почему это не работает, и что мне нужно сделать, чтобы это заработало?

Спасибо

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Ресурс и файл - это две разные вещи. Ресурс загружается из загрузчика классов и находится в пути к классам. Он может быть загружен из файловой системы, или из jar-файла, или из сокета (или из любого другого места, в зависимости от загрузчика классов). Запись на ресурс не имеет смысла.

Если вы хотите читать и писать из / в файл, не используйте ресурс. Используйте файловые потоки или программу чтения / записи.

0 голосов
/ 13 декабря 2011

Вы пытаетесь этот код, когда он был экспортирован в Jar? Потому что, если вы, JAR - это форма архива, и поэтому его содержимое не может быть легко изменено. По сути, вы сможете читать файлы в JAR, но не записывать.

Поэтому, даже если код в настоящее время не в форме JAR, вам не следует пытаться делать то, что вы делаете. К сожалению, в любом случае это невозможно - как я сам узнал после бесчисленных попыток!

Однако было бы приятно услышать, в чем именно заключается ошибка. Например, вы поймали какие-то исключения?

0 голосов
/ 13 декабря 2011

Я попробовал ваш фрагмент локально, и он работает. Следует учитывать, что загруженный ресурс - это файл .class, вы должны искать там файл свойств, а не там, где находится файл .java.

Чтобы узнать путь, вы могли бы сделать это

final FileOutputStream outStream = new FileOutputStream(f);
System.out.println(f.getAbsolutePath()); // <-- add this line
...