簡體   English   中英

用 Java 編寫 .properties 文件會破壞文件的結構

[英]Writing a .properties file in Java destroys the structure of the file

我可以使用以下代碼成功寫入 Java .properties文件:

Properties prop = new Properties();
prop.load(input);
prop.setProperty("myProp", "myValue");
prop.store(output, "");

但是當我查看我的.properties文件時,所有的結構都消失了! 字段是按隨機順序寫的,所有的評論(花了我很多精力寫的)都被覆蓋了!

如何寫入.properties文件,同時確保其結構是保守的?

您可以使用Apache Commons 配置 2

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-configuration2</artifactId>
  <version>2.1.1</version>
</dependency>

輸入文件demo.properties

# This is the file header
#
# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
# aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

# Database user
db.user=admin

# Database password
db.password=password

# Database URL
db.url=localhost

# This is the file footer
#
# Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
# occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

演示應用程序讀取、修改和寫入新的屬性文件:

import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.PropertiesConfigurationLayout;
import org.apache.commons.configuration2.ex.ConfigurationException;

import java.io.*;

class PropertiesFileWithCommentsDemo {
  public static void main(String[] args) throws IOException, ConfigurationException {
    // Load existing properties file
    File file = new File("demo.properties");
    PropertiesConfiguration config = new PropertiesConfiguration();
    PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout();
    layout.load(config, new InputStreamReader(new FileInputStream(file)));

    // Print some information from the properties file
    System.out.println(layout.getHeaderComment());
    System.out.println(layout.getKeys());
    System.out.println(layout.getFooterComment());

    // Change existing property
    config.setProperty("db.password", "secret");

    // Add new property + comment + leading blank line
    config.setProperty("new.property", "Hello world!");
    layout.setComment("new.property", "This is a newly added property");
    layout.setBlancLinesBefore("new.property", 1);

    // Save to new properties file
    layout.save(config, new FileWriter("demo-append.properties", false));
  }
}

控制台日志:

# This is the file header
#
# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
# aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
[db.user, db.password, db.url]

# This is the file footer
#
# Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
# occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

輸出文件demo-append.properties

# This is the file header
#
# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
# aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

# Database user
db.user=admin

# Database password
db.password=secret

# Database URL
db.url=localhost

# This is a newly added property
new.property = Hello world!

# This is the file footer
#
# Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
# occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM