2017-01-26 22 views
0

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

private void overrideDefaultPropertiesFile(String logFile) { 
    try { 
     ClassLoader classLoader = this.getClass().getClassLoader(); 
     InputStream inputStream = classLoader.getResourceAsStream("log4j.properties"); 
     String fileText = ""; 
     String search = "log4j.appender.archivo.file"; 
     String adaptSlashes = logFile.replace("\\", "/"); 
     String replacement = "log4j.appender.archivo.file=" + adaptSlashes; 
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
     String line; 
     BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
     while ((line = bufferedReader.readLine()) != null) { 
      if (!line.startsWith(search)) { 
       fileText += line + "\r\n"; 
      } 
     } 
     bufferedReader.close(); 
     fileText += replacement + "\r\n"; 
     URI uri = getClass().getResource("/log4j.properties").toURI(); 
     File log4jProperties = new File(uri); 
     FileWriter fileWriter = new FileWriter(log4jProperties, false); 
     fileWriter.write(fileText); 
     fileWriter.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 
} 

Что я забыл или что я делаю не так?

С уважением.

-------- Обновлено --------

Я на Eclipse, и приложение это на Maven. Отладка путей указывает:

Затмение (файл я пытаюсь изменить) ->C:\Users\iagoaa\Documents\serpa\src\main\resources\log4j.properties

URI ->file:/C:/Users/iagoaa/Documents/serpa/target/classes/log4j.properties

(До сих пор я не понимал, что это не то же самое путь, пока я не отлаживал снова, чтобы писать здесь ссылки. Хотя, я проверил файл в URI и не записал изменений)

Я использую последний метод из этого блога (Link info), потому что, когда проект на JAR, вы не можете сделать new File("src/main/resources/log4j.properties").

-------- Обновлено 2 --------

код работает, у меня был беспорядок с пути, когда я увидел этот файл в браузере пакетов Eclipse. Кроме того, в выходном файле было написано, но вместо ввода, чтобы увидеть, были ли изменения, я нажал F5, чтобы обновить папку и посмотреть, была ли изменена дата изменения, но я не знаю, почему она не изменилась, и я подумал, что это wasn ' я пишу, но я вынужден бросить исключение, и это написано.

+1

Пробовал использовать отладчик; или иметь выход, ur содержание, которое имеет значение, напечатанное на stdout, чтобы проверить, что у него есть ожидаемый контент? – GhostCat

+1

Просто отлаживайте или регистрируйте 'uri' как-то. 'log4jProperties', скорее всего, укажет на другой файл, поскольку IDE или maven (не знаю, что вы используете) обычно создают проект в некотором временном каталоге и запускают его там. – Evgeny

+0

Спасибо за ваши ответы, я обновил свой вопрос более подробно. – Aker666

ответ

0

Код кода не вызывает сомнений, похоже, что он работает нормально (возможно, вы просто не указали inputStream.close() после закрытия буферизованного считывателя). Проблема в том, что файлы ресурсов копируются в сгенерированную папку .class и артефактов (в зависимости от используемой вами среды IDE). Попробуйте использовать отладчик и посмотрите путь, на который указывает URI, чтобы узнать путь к вашим измененным файлам.

+0

Спасибо за ваш ответ, я обновил свой вопрос более подробно. – Aker666

+0

Мне все еще неясно: вы хотите изменить файл упакованного ресурса log4j.properties (расположенный внутри .jar)? И источником модификации должны быть log4j.properties из src \ main \ resources \? – aUserHimself

+0

Я обновил проблему! Спасибо за вашу помощь! – Aker666