You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java项目无法读取Eclipse创建的properties文件?

Java读取Eclipse创建的Properties文件失败问题解析

项目概况

我有一个读取properties文件的简单Java项目,核心包含两个类,根目录下的propertiesFiles文件夹中存放了3个内容一致的properties文件:

  • 通过Eclipse(File→New→Other→File)创建
  • 记事本创建后修改扩展名生成
  • Visual Studio Code创建

核心代码

PropertiesFileReader类

public class PropertiesFileReader {
    
    public void propertiesFileReader(String key) throws IOException {
            
        Properties pro = new Properties();
    
        // 方案1:FileReader读取
        File f = new File("./propertiesFiles/exampleByNotepad.properties");
        FileReader fr = new FileReader(f);
    
        // 方案2:InputStream读取
        InputStream input = new FileInputStream("./propertiesFiles/exampleByNotepad.properties");
    
        pro.load(fr); // 也可替换为pro.load(input);
        pro.setProperty("firstKey", "first Value");
    
        System.out.println(pro.getProperty(key));
    }

}

propertiesFileExecution类

public class propertiesFileExecution {
    
    public static void main(String[] args) throws IOException {
        
        PropertiesFileReader pfr = new PropertiesFileReader();
        
        pfr.propertiesFileReader("sayHello");
        pfr.propertiesFileReader("sayGoodbye");
        pfr.propertiesFileReader("myName");
        pfr.propertiesFileReader("firstKey");
    }

}

properties文件内容

三个文件内容完全一致:

# this is properties file
sayHello=Hello
sayGoodbye=Goodbye
myName=Ray

异常现象

  1. 读取异常:读取记事本和VS Code创建的文件时,能正常输出对应键值;读取Eclipse创建的文件时,输出结果为null null null first Value——原有键全部返回null,仅手动设置的firstKey能正常输出。
  2. 跨编辑器编辑异常:
    • Eclipse仅能编辑自身创建的properties文件,无法编辑另外两个;
    • 记事本可读写另外两个文件,但无法正常打开Eclipse创建的文件。

原因分析

核心问题是文件编码不兼容,具体分为两点:

  1. 读取编码不匹配:
    Eclipse创建properties文件时,若未手动指定编码,部分版本默认会使用UTF-8编码;而Java的FileReader是基于系统默认编码(Windows下通常为GBK)读取文件,编码不匹配会导致文件内容被乱码解析,Properties类无法识别键值对,因此返回null。
    记事本创建的文件默认采用系统默认编码,VS Code若未修改设置也会适配系统编码,因此能被正常读取。
  2. 编辑器编码支持限制:
    记事本对非系统默认编码的文件(如UTF-8带BOM或特殊编码)兼容性差,因此无法正常打开Eclipse创建的文件;Eclipse对自身创建的properties文件做了编辑器关联绑定,仅能识别符合特定编码格式的文件,因此无法编辑其他方式创建的文件。

解决办法

1. 统一编码并指定读取编码

  • 调整Eclipse文件编码:右键Eclipse创建的properties文件 → Properties → Resource → Text file encoding,选择UTF-8或Default(系统默认编码)。
  • 修改读取代码:避免使用依赖系统编码的FileReader,改用InputStreamReader指定编码读取,确保和文件编码一致:
// 替换原有FileReader代码
InputStreamReader fr = new InputStreamReader(
    new FileInputStream("./propertiesFiles/exampleByEclipse.properties"), 
    StandardCharsets.UTF_8
);
pro.load(fr);

2. 规范Eclipse创建Properties文件的方式

不要用普通File创建,选择专门的Properties文件流程:File→New→Other→General→File→输入文件名xxx.properties,创建后右键→Open With→Properties Editor,确保文件编码符合Java Properties规范,同时适配Eclipse编辑器。

3. 验证并统一文件编码

用Notepad++等工具打开所有properties文件,查看并调整编码格式(通过编码菜单),将所有文件统一为相同编码(如UTF-8或GBK),即可解决跨编辑器兼容问题。

内容的提问来源于stack exchange,提问作者PhuocThua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:47:15