修改properties文件key的value

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改properties文件key的value相关的知识,希望对你有一定的参考价值。

public static void writeValue(String key, String value) try String a = (String)config.setProperty(key, value); System.out.println(a); catch (Exception e) e.printStackTrace(); System.err.println("ConfigInfoError" + e.toString()); 我用以上方法想更改一个properties中的key的value,但我看到a的返回值还是原来key的value,再看文件并没有更改,还需要FileOutputStream操作么?请指点!谢谢!

参考技术A 你说的很对:需要FileInputStream
fs=new
FileInputStream(路径)
Properties
p=new
Properties();
p.load(fs);
这只是把磁盘中的文件数据库加载到内存中
让后设置值
p.setProperty(key,value);
修改后数据依然还在内存。要想保存到文件必须把它从内存中传到磁盘文件
此时FileOutputStream
fos=new
FileOutputStream(路径)
p.store(fos);
之后才把修改的文件内容保存到磁盘。

java学习-加载.properties工具类

javaWeb项目,要加载xxx.properties或其它如.txt, .md后缀的文本文件

文本内容有两种格式

key:value或者key=value

诸如Spring框架,Jfinal框架,都是使用java.util.Properties类来加载文本配置文件

Poperties类是按行读取key和value,所以我们写配置文件时,只能一行一个key/value键值对

 

这些配置文件一般会在编译时打包到WEB-INF/classes/文件夹下

我们要加载时就要通过使用下面方法获取InputStream输入流

class.getResourceAsStream(String name)
最后调用Properties.load(InputStream)就可以通过Properties.getProperty(key)获得对应值
具体实例
注意,我们设置资源文件是src/main/resources,,而mapper没有设置为资源文件
/src/main/resources/mapper/jdbc.properties
# set up mysql driver
# may need auto detect this driver class
jdbc.driver:com.mysql.jdbc.Driver
jdbc.url:jdbc:mysql://localhost:3306/ssm?useUnicode=true&useSSL=false&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

 

原生读取配置文件

 1         ClassLoader ret = Thread.currentThread().getContextClassLoader();
 2         if(ret==null) {
 3             ret=ClassLoader.getSystemClassLoader();
 4         }
 5         
 6         InputStream inputStream = ret.getResourceAsStream("mapper/jdbc.properties");
 7         Properties properties=new Properties();
 8         try {
 9             properties.load(inputStream);
10         } catch (IOException e) {
11             e.printStackTrace();
12         }
13         finally {
14             if (inputStream != null)
15                 try {
16                     inputStream.close();
17                 } catch (IOException e) {
18                     e.printStackTrace();;
19                 }
20         }
21         
22         System.out.println(properties.getProperty("jdbc.password"));

结果
root

 

用这种方式读取配置文件有个问题,那就是如果文件使用utf-8编码,而我们windows电脑默认用ISO-8859-1编码,如果读取中文,会发生乱码

在这里spring和jfinal读取配置文件工具类做的优化,会将inputStream转换成new InputStreamReader(inputStream,"UTF-8")使用utf-8编码的字符流读取配置文件,

这样就不会有乱码问题。

改进如下

将第9行的代码替换

properties.load(new InputStreamReader(inputStream, "UTF-8"));

这样读取含有中文的值时,就不会发生报错的

 

spring读取配置文件的方法

方法1

只是借助ResourceLoader类获得具体的资源文件,classpath表示资源文件是在WEB-INF/classes/下,才底层自动决定用哪种方式加载

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;

Resource resource = new DefaultResourceLoader().getResource("classpath:/mapper/jdbc.properties");
        Properties properties1 = new Properties();
        try {
            properties1.load(new InputStreamReader(resource.getInputStream(), "UTF-8"));
            System.out.println(properties1.getProperty("jdbc.password"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

 

方法2

直接使用class资源加载类,然后调用PropertiesUtils工具类获得Propertiesg类,

这个工具类还可以加载xml文件

import java.io.IOException;
import java.util.Properties;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;

Resource res = new ClassPathResource("mapper/jdbc.properties");
        try {
            System.out.println(res.getFile().getAbsolutePath());
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        
        EncodedResource encRes = new EncodedResource(res,"UTF-8");
        try {
            Properties properties = PropertiesLoaderUtils.loadProperties(encRes);
            String jdbc=properties.getProperty("jdbc.password");
            System.out.println(jdbc);
        } catch (IOException e) {
            e.printStackTrace();
        }

结果

D:WorkSpacesSSMTest argetclassesmapperjdbc.properties
root

 

Jfinal框架是使用PropKit工具类一次加载properties文件后,可以在程序的任何地方使用它

 

 

以上是关于修改properties文件key的value的主要内容,如果未能解决你的问题,请参考以下文章

properties配置文件

Properties类

java的properties文件怎么创建

Properties文件解析

properties文件怎么打开啊

4springboot的配置文件及yml使用