
本文详解java使用filewriter向windows网络共享路径(unc)写入文件时常见的“access denied”错误原因,重点说明unc路径语法规范、共享权限设置及java代码修正方法。
本文详解java使用filewriter向windows网络共享路径(unc)写入文件时常见的“access denied”错误原因,重点说明unc路径语法规范、共享权限设置及java代码修正方法。
在Java中通过UNC路径(如 \SERVERShareile.txt)访问远程Windows共享目录时,出现 java.io.FileNotFoundException: ... (Access is denied) 错误,通常并非单纯由代码缺陷导致,而是路径格式错误 + 系统级权限缺失共同作用的结果。以下从三个关键层面系统解析并提供可落地的解决方案。
✅ 一、路径语法:必须确保UNC路径结构完整且转义正确
原始代码中路径为:
"\\JOSHY-PC\Users\joshy\Desktop\New folder (4)message.txt"
存在两个致命问题:
- 缺少目录分隔符:New folder (4)message.txt 实际应为 New folder (4)\message.txt —— message.txt 是文件名,必须位于目标文件夹内,而非拼接在文件夹名末尾;
- 反斜杠转义不足:Java字符串中每个 需双写为 \,而UNC路径开头的 \ 应写作 \\(即四个反斜杠),否则会被解析为非法转义序列或路径截断。
✅ 正确写法(含修复):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
String remotePath = "\\JOSHY-PC\Users\joshy\Desktop\New folder (4)\message.txt"; FileWriter writer = new FileWriter(remotePath);
? 提示:为增强可读性与健壮性,建议使用 Paths.get() 和 Files.write()(推荐Java 7+)替代 FileWriter:
import java.nio.file.*; import java.nio.charset.StandardCharsets; Path path = Paths.get("\\JOSHY-PC\Users\joshy\Desktop\New folder (4)\message.txt"); Files.write(path, (ip + message).getBytes(StandardCharsets.UTF_8));
✅ 二、Windows共享权限:三重权限缺一不可
即使路径正确,Java仍会因权限不足报错。需同时满足以下三项配置:
| 层级 | 配置项 | 操作指引 |
|---|---|---|
| 共享权限 | 在目标PC(JOSHY-PC)上右键共享文件夹 → “属性” → “共享”选项卡 → “高级共享” → 勾选“共享此文件夹” → “权限” → 确保 Everyone 或当前登录用户具有 “更改”和“读取” 权限 | ⚠️ 仅设共享权限不够! |
| NTFS权限 | 同一文件夹 → “安全”选项卡 → 编辑 → 添加用户(如 JOSHY-PCjoshy 或 Everyone)→ 赋予 “修改”、“写入”、“读取和执行” 权限 | ? 这是触发“Access Denied”的最常见原因 |
| 用户凭据一致性 | 运行Java程序的本地账户(如 DESKTOP-ABCAlice)必须能被远程PC识别。若未启用“密码保护的共享”,建议在远程PC上创建同名同密码账户,并确保Java进程以该用户身份运行 | ? 可在命令行先手动测试:net use Z: \\JOSHY-PC\Users\joshy\Desktop\New folder (4) |
✅ 三、其他关键注意事项
- 防火墙与网络发现:确保两台PC处于同一网络配置文件(如“专用网络”),且Windows防火墙允许“文件和打印机共享”;
- 共享路径有效性:在本地资源管理器中直接粘贴 \JOSHY-PCUsersjoshyDesktopNew folder (4) 测试是否可访问;
- 路径长度限制:Windows默认最大路径260字符,长路径需启用 LongPathsEnabled 组策略或使用 \? 前缀(Java中慎用);
-
编码与资源释放:优先使用 try-with-resources 避免流未关闭:
try (FileWriter writer = new FileWriter(remotePath)) { writer.write(ip + message); }
综上,“Access Denied”本质是Java作为客户端,受制于Windows底层的共享访问控制体系。修复路径只是第一步,真正稳定运行需协同配置共享层、文件系统层及网络认证层。建议按“路径校验 → 手动访问测试 → 共享权限检查 → NTFS权限赋权 → 凭据验证”顺序排查,可90%解决此类问题。

















