获取,修改properties文件中的属性值

最近在弄取一个值,因为只是一个值,感觉放到数据库中有些麻烦,其实也没有多麻烦,无非就是创建一张表,然后存储数据。但是我感觉因为一个值,还又创建表,没有必要。所以就想到了放在properties文件。因为不太熟悉这个,所以上网查了很多。代码其实都差不多,都是一个意思。我感觉最主要的是properties文件的地址。很多写博客的都是直接path带过,他妹的,老子要是知道完整地址的话,用你干哈啊。这就是让人很生气的。再有就是,没有说的很详细。一知半解的。我也是看了自己的项目,然后找到properties文件才知道哪跟哪的。

下面的是工具类



import org.apache.logging.log4j.util.PropertiesUtil;
import org.springframework.beans.factory.annotation.Value;

import java.io.*;
import java.util.Properties;

public class IoUtil {


    private static String path = Thread.currentThread().getContextClassLoader().getResource("messages.properties").getPath();

    private static Properties prop;

    public static void load(String path){
        //这里的path是项目文件的绝对路径
        //先获取项目绝对路径:Thread.currentThread().getContextClassLoader().getResource("").getPath();
        //然后在项目路径后面拼接"properties/sysConfig.properties";
        prop= new Properties();// 属性集合对象
        FileInputStream fis;
        try {
            System.out.println(path);
            fis = new FileInputStream(path);
            prop.load(fis);
            fis.close();// 关闭流
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //参数为要修改的文件路径  以及要修改的属性名和属性值
    public static Boolean updatePro(String path,String key,String value){
        if(prop==null){
            load(path);
            System.out.println("修改前重新加载一遍");
        }
        System.out.println("获取添加或修改前的属性值:"+key+"=" + prop.getProperty(key));
        prop.setProperty(key, value);
        // 文件输出流
        try {
            FileOutputStream fos = new FileOutputStream(path);
            // 将Properties集合保存到流中
            prop.store(fos, "Copyright (c) Boxcode Studio");
            fos.close();// 关闭流
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
        System.out.println("获取添加或修改后的属性值:"+key+"=" + prop.getProperty(key));
        return true;
    }

    //参数为要修改的文件路径  以及要修改的属性名和属性值
    public static String getPro(String path,String key){
        if(prop==null){
            load(path);
            System.out.println("重新加载一遍");
        }
        FileInputStream fis;
        try {
            fis = new FileInputStream(path);
            prop.load(fis);// 将属性文件流装载到Properties对象中
            fis.close();// 关闭流
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("查询到的"+key+"的值:"+prop.getProperty(key));
        return prop.getProperty(key);
    }


}

地址主要是通过    private static String path =Thread.currentThread().getContextClassLoader().getResource("messages.properties").getPath();

来获取的。

注意事项:

    修改的文件是在target文件下的,这个是我的项目target目录。首先在resources下的有这个文件。然后target才会有这个文件。

千万别有人说这个target的文件夹我怎么没有什么之类的,这个你项目没有,自己查啊。注意修改的是target下的这个properties文件,resoureces下的并不会被修改。

有人会问我,那resources下都有properties文件,为什么不直接操作这个呢,因为我只查到了怎么获取,怎么修改我不会,

获取的方法如下:

 Properties properties=new Properties();
        InputStream in = null;
        try {
            in = PropertiesUtil.class.getClassLoader().getResourceAsStream("messages.properties");
            properties.load(new InputStreamReader(in, "UTF-8"));
            address = properties.getProperty("address");
            System.out.println(properties.getProperty("address"));
        } catch (Exception e) {
            System.out.println( "文件未找到!");
            e.printStackTrace();
        }

        return address;

但是修改的话,还是要文件的地址的。

Properties properties=new Properties();
FileOutputStream file = new FileOutputStream(path);

properties.put("address", address);

System.out.println("得到属性key:"+properties.getProperty("address"));
properties.store(file, "系统配置修改");

因为关于这个地址我有点问题。这个项目是要发布到服务器上的,所以先有了一种方法,已经成功了。就没有在纠结。如果看到这篇文章的人,有解决我注意事项下的这个问题的话,记得给我发给评论呗

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值