为何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
异常现象
- 读取异常:读取记事本和VS Code创建的文件时,能正常输出对应键值;读取Eclipse创建的文件时,输出结果为
null null null first Value——原有键全部返回null,仅手动设置的firstKey能正常输出。 - 跨编辑器编辑异常:
- Eclipse仅能编辑自身创建的properties文件,无法编辑另外两个;
- 记事本可读写另外两个文件,但无法正常打开Eclipse创建的文件。
原因分析
核心问题是文件编码不兼容,具体分为两点:
- 读取编码不匹配:
Eclipse创建properties文件时,若未手动指定编码,部分版本默认会使用UTF-8编码;而Java的FileReader是基于系统默认编码(Windows下通常为GBK)读取文件,编码不匹配会导致文件内容被乱码解析,Properties类无法识别键值对,因此返回null。
记事本创建的文件默认采用系统默认编码,VS Code若未修改设置也会适配系统编码,因此能被正常读取。 - 编辑器编码支持限制:
记事本对非系统默认编码的文件(如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
相关产品推荐
相关产品推荐

