2016-09-23 5 views
-1

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

| 
|--src/main/resouces 
     | 
     |-updatePropertiesFile.java 
     |-xyz_en_US.properties 
     |-xyz_en_AF.properties 
     |-xyz_en_AE.properties 

Это моя проектная структура.

У меня есть класс updatePropertiesFile, чтобы обновить ключ для всего файла свойств. У меня около 200 файлов свойств.

Так что мне нужно то, что мне нужно написать метод для обновления определенного ключа во всех этих файлах свойств. Ручное изменение - это не так. Мне нужно написать приложение, которое делает эту функциональность.

Я пробовал использовать механизм ресублирования. Но, используя ресурс, мы можем получить только один файл свойств. Я пробовал ResourceBundle.getBundle(String,Locale) и ResourceBundle.getBundle(String) методов.

Мне нужна итерация через этот файл свойств и обновление для ключа.

Моя первоначальная проблема исправлена.

Я сделал это так:

File[] files = new File("src/main/resources").listFiles(); 
    for (File file : files) { 
    if (file.getName().endsWith("properties")) { 
    //my logic 
    } 

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

Чтобы сохранить порядок, я попытался с помощью:

public static class LinkedProperties extends Properties { 
     private final HashSet<Object> keys = new LinkedHashSet<Object>(); 

     public LinkedProperties() { 
     } 

     public Iterable<Object> orderedKeys() { 
      return Collections.list(keys()); 
     } 

     public Enumeration<Object> keys() { 
      return Collections.<Object>enumeration(keys); 
     } 

     public Object put(Object key, Object value) { 
      keys.add(key); 
      return super.put(key, value); 
     } 
    } 

Но это вызвало некоторые изменения в паре ключ-значение в файле свойств. Некоторый особый персонаж прибавил.

Пожалуйста, помогите мне, чтобы сохранить комментарии и порядок

+1

Прочитайте их как файлы, а не как ресурс. Невозможно обновить ресурс в java. – talex

+0

Почему это так сложно, поскольку все ваши файлы находятся в одной папке? Прочитайте каждый файл, сохраните содержимое в памяти, обновите требуемый ключ и запишите файл обратно – Ironluca

ответ

3

Каждый Java IDE там есть функция замены в своем пути. Sublime Text, VS Code и Atom почти наверняка имеют это. IntelliJ особенно хорош. Нет причин даже писать Java-код для этого. В противном случае, это так просто, как:

File[] files = new File("src/main/resources").listFiles(); 
for (File file in files) { 
    if (file.getName().endsWith("properties")) { 
     //Load and change... 
    } 
} 
+0

Это сработало. Спасибо. Но у меня есть еще одна проблема. Когда мне это понравилось, комментарии в моем файле свойств были удалены, и порядок ключа получил chnaged. Но я не хочу этих изменений. Мне нужны комментарии и нужно также поддерживать порядок. –

2

Этот код итерацию по всем файлам в данном каталоге и открывает каждый .properties файл. Затем он применяет измененные значения и сохраняет файл снова.

public void changePropertyFilesInFolder(File folder) { 
    for(File file : folder.listFiles()) { 
     if(file.isRegularFile() && file.getName().endsWith(".properties")) { 
      Properties prop = new Properties(); 
      FileInputStream instream = new FileInputStream(file); 
      prop.load(instream); 
      instream.close(); 
      prop.setProperty("foo", "bar"); // change whatever you want here 
      FileOutputStream outstream = new FileOutputStream(file); 
      prop.store(outstream, "comments go here"); 
      outstream.close(); 
     } 
    } 
} 
+0

Это сработало. Спасибо. Но у меня есть еще одна проблема. Когда мне это понравилось, комментарии в моем файле свойств были удалены, и порядок ключа получил chnaged. Но я не хочу этих изменений. Мне нужны комментарии и нужно также поддерживать порядок –

+1

@JinceMartin К сожалению, класс '' Свойства '' '' '' построен не для обработки любого форматирования файла '.properties', который включает как комментарии, так и порядок. См. [Этот вопрос] (https://stackoverflow.com/questions/565932/a-better-class-to-update-property-files) для возможной альтернативы. – Hexaholic

+0

ok tahnk you. позвольте мне попробовать это –