读取user.dir下文件时遇java.io.FilePermission权限拒绝问题求助
解决Java读取文件时的AccessControlException权限问题
这是典型的JVM安全管理器限制导致的文件读取权限问题,结合你的Eclipse工作区读取文件场景,咱们一步步排查解决:
1. 先确认文件路径是否正确
你用System.getProperty("user.dir")获取的是Eclipse项目的工作目录,但可能存在路径拼接错误或者文件位置不对的情况:
- 先临时添加代码打印实际路径,确认是否指向正确的文件:
String fname = System.getProperty("user.dir") + "/Towary.txt"; System.out.println("当前读取的文件路径:" + fname); // 打印后检查路径是否和实际文件位置一致 - 注意Windows系统下路径分隔符可以用
File.separator代替硬编码的/,避免跨平台问题:import java.io.File; // ... String fname = System.getProperty("user.dir") + File.separator + "Towary.txt"; - 确保
Towary.txt确实放在Eclipse项目的根目录下(不是src文件夹内部)。
2. 调整Eclipse的安全权限配置
如果你的程序是在启用了Java安全管理器的环境下运行,需要明确授予文件读取权限:
- 打开Eclipse的运行配置:
Run > Run Configurations,找到你的Java应用配置 - 切换到
Arguments标签页,在VM arguments输入框中添加权限配置参数:-Djava.security.policy=policy.policy - 在项目根目录创建一个
policy.policy文件,内容如下:grant { // 授予读取当前工作目录下Towary.txt的权限 permission java.io.FilePermission "${user.dir}/Towary.txt", "read"; }; - 如果你只是练习使用,也可以直接禁用安全管理器(仅用于测试环境),在VM arguments中添加:
-Djava.security.manager=allow
3. 检查系统层面的文件权限
最后确认Windows系统中Towary.txt的权限设置:
- 右键文件选择
属性 > 安全标签页 - 确保当前登录用户(或用户组)拥有读取该文件的权限,如果没有,手动添加读取权限即可。
内容的提问来源于stack exchange,提问作者Igor Nieradka
相关产品推荐
相关产品推荐

