Java中properties文件编码问题

问题一:properties文件显示乱码

原因是因为properties默认使用ASCII码,就算在文件中填写了中文,再打开后依然会转换成ASCII码的形式。

解决这个问题的办法很简单,设置IDE的properties文件的编码方式为UTF-8即可,以IDEA为例:

大家看到,这里不但设置了编码格式为UTF-8,旁边还有Transparent native-to-ascii conversion选项(eclipse里面没有),这个东西有啥作用呢,这里先挖个坑,一会儿再填。此时咱们不勾选这个选项。

设置文件编码后之前的内容就全部乱码了,需要重新填写内容,这个解决了properties文件显示乱码的问题。


问题二:Java读取properties文件乱码

设置完properties文件编码格式为UTF-8后,一般我们通过字节流读取properties文件的方式会乱码:

    public void TestProp1() throws IOException {
        Properties properties = new Properties();
        InputStream in = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("application.properties");
        properties.load(in);
        System.out.println(properties.getProperty("yaml.name"));
    }

解决办法就是通过字符流的方式读取properties文件:

    public void TestProp() throws IOException {
        Properties properties = new Properties();
        InputStream in = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("application.properties");
        properties.load(new InputStreamReader(in, "UTF-8"));
        System.out.println(properties.getProperty("yaml.name"));
    }

问题三:Spring boot的@ConfigurationProperties读取properties文件乱码

解决的办法目前有三种:

方法一:使用yml文件

我在网上查询时有人说这个办法不行,说yml依然会解析成properties文件来读取,反正我的验证结果是没问题的,这里不做太多讨论

方法二:设置Transparent native-to-ascii conversion

这里填之前的坑,在IDEA勾选这个选项的作用就是:展示为UTF-8格式,但是运行时转换成ASCII的形式,实际上使用的是native2ascii.exe来进行转换。图一是IDEA中填写的,图二是实际打开时的内容

当然,如果我们用的eclipse没有这个选项的话可以用native2ascii.exe,或者是下相关插件,但是都太鸡肋了

是否有@ConfigurationProperties直接读取UTF-8不乱码的方法呢?

方法三:添加注解@PropertySource并声明encoding="UTF-8"

//加注解
@Component
@ConfigurationProperties(prefix = "yaml")
@PropertySource(value = {"classpath:yaml.properties"}, encoding = "UTF-8")

但是这里有个坑

但是这里有个坑

但是这里有个坑

这种方法只能对自定义的properties文件有效,对于spring boot默认生成的application.properties没有效果

具体原因我也不知,希望知道的大拿留言告知

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java可以通过Properties类来读取properties配置文件。具体步骤如下: 1. 创建Properties对象 Properties prop = new Properties(); 2. 加载配置文件 prop.load(new FileInputStream("config.properties")); 3. 读取配置文件的属性值 String value = prop.getProperty("key"); 其,key为配置文件的属性名,value为属性值。 需要注意的是,配置文件的路径需要根据实际情况进行修改,可以使用相对路径或绝对路径。另外,如果配置文件存在文字符,需要使用UTF-8编码格式进行读取。 ### 回答2: Java读取properties配置文件的方法很简单,可以借助JavaProperties类实现。 首先,需要引用java.util.Properties类,通过load()方法读取配置文件的数据,返回一个Properties对象。其配置文件可以是任何文件类型,但其结构必须按照.properties格式书写。在读取时,可以使用相对或绝对路径指定配置文件的位置。 读取配置文件的示例代码如下: ``` import java.util.*; import java.io.*; public class ReadProperties { public static void main(String[] args) { Properties props = new Properties(); try { FileInputStream in = new FileInputStream("config.properties"); props.load(in); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } String url = props.getProperty("url"); String user = props.getProperty("user"); String password = props.getProperty("password"); System.out.println("url: " + url); System.out.println("user: " + user); System.out.println("password: " + password); } } ``` 上述代码,首先创建了一个Properties对象,并通过调用load()方法读取配置文件config.properties的数据。然后,通过调用getProperty()方法分别获取了配置文件的url、user和password属性值,并将其输出到控制台。 另外,也可以使用Class.getResourceAsStream()或ClassLoader.getResourceAsStream()方法读取配置文件。示例代码如下: ``` import java.util.*; import java.io.*; public class ReadProperties { public static void main(String[] args) { Properties props = new Properties(); try { InputStream in = ReadProperties.class.getResourceAsStream("/config.properties"); props.load(in); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } String url = props.getProperty("url"); String user = props.getProperty("user"); String password = props.getProperty("password"); System.out.println("url: " + url); System.out.println("user: " + user); System.out.println("password: " + password); } } ``` 参考上述示例代码,读取properties配置文件非常简单,只需要使用JavaProperties类和相关方法即可。值得注意的是,在读取配置文件时,需要注意配置文件的位置及格式,以避免出现读取失败或读取错误的情况。 ### 回答3: properties 配置文件是一种常见的文本格式文件,其结构类似键值对。在 Java 读取 properties 配置文件非常方便,在 Java 的标准库已经提供了相关的 API。本文将介绍 Java 读取 properties 配置文件的方法。 Java 提供了 java.util.Properties 类用于操作 properties 文件。该类实现了 Map 接口,可以通过 key-value 的方式存储和操作属性,在 Java 读取 properties 文件通常需要进行两个步骤: 1.创建 Properties 对象,同时将 properties 文件的内容加载到 Properties 对象。 2.通过 Properties 对象获取流的配置值。 读取 Properties 文件,首先需要创建一个 Properties 对象,通常使用 Properties 类的 load 方法来加载 properties 文件,load 方法支持两种方法加载 properties 文件。其一是使用文件路径加载,其二是使用 InputStream 对象加载。 public void load(InputStream inStream) public void load(Reader reader) 对于第一种方式,看一下下面的代码: Properties properties = new Properties(); properties.load(new FileInputStream("/path/to/my.properties")); 对于第二种方式,将 InputStream 对象传递给 Properties 对象,调用 load 方法来读取内容: InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.properties"); Properties properties = new Properties(); properties.load(inputStream); 完成 Properties 文件的加载后,接下来就可以通过 getProperty() 方法获取到 key 对应的 value 内容了: String value = properties.getProperty("key"); 当然,Properties 对象还提供了很多其他的方法用于操作 properties 文件,例如,store() 方法用于存储 properties 文件, toString() 方法可用于将 Properties 对象转化为字符串等等。 总的来说,Java 读取 properties 配置文件非常简单,通过上述方法,可以轻松得到 properties 文件的配置项,完成自己关于 properties 文件的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SenKnight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值