Java程序向网络电脑写入文件时出现Access Denied错误排查
局域网Java写入共享文件夹报Access Denied的排查方案
问题重现
平时可正常向局域网目标文件夹传输文件,但Java程序写入TXT时抛出Access is denied错误,代码及报错信息如下:
原代码
import java.util.Scanner; import java.io.FileWriter; import java.io.IOException; public class Answer { static Scanner input = new Scanner(System.in); public static void main(String[] args) { System.out.println("What ip?"); String ip = input.nextLine(); System.out.println("message?"); String message = input.nextLine(); System.out.println("ip is " + ip + "?"); System.out.println("message is " + message + "?"); try { FileWriter writer = new FileWriter("\\\\JOSHY-PC\\Users\\joshy\\Desktop\\New folder (4)message.txt"); writer.write(ip + message ); writer.close(); }catch (IOException e){ e.printStackTrace(); } } }
报错信息
What ip? 192.168.1.1 message? banana ip is 192.168.1.1? message is banana? java.io.FileNotFoundException: \\JOSHY-PC\Users\joshy\Desktop\New folder (4)message.txt (Access is denied) at java.base/java.io.FileOutputStream.open0(Native Method) at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:123) at java.base/java.io.FileWriter.<init>(FileWriter.java:67) at answerThePhone/answerThePhone.Answer.main(Answer.java:21)
排查与解决
1. 路径拼接错误(最直接原因)
原代码中的目标路径缺少文件夹与文件名的分隔符,正确路径应为\\\\JOSHY-PC\\Users\\joshy\\Desktop\\New folder (4)\\message.txt——注意New folder (4)后添加了\\。
原路径将文件夹名和文件名直接拼接,系统会尝试创建一个名为New folder (4)message.txt的文件,这种非常规文件名可能触发系统权限校验拦截,或因路径结构识别失败导致访问被拒。
2. 运行身份权限不一致
手动传输文件时使用的是当前登录用户的权限,但Java程序的运行身份可能不同:
- 若用IDE运行,确认IDE是以当前用户启动,而非管理员或其他账户;
- 若打包成Jar运行,确保运行Jar的账户与手动传文件的账户一致,且拥有共享文件夹的写入权限。
3. 共享文件夹的双重权限检查
Windows共享文件夹有两层权限控制:
- 共享权限:右键文件夹→属性→共享选项卡,确认已给目标用户开放写入权限;
- NTFS权限:右键文件夹→属性→安全选项卡,检查目标用户是否拥有“写入”“修改”权限。
两层权限需同时满足,否则会出现手动可传但程序写入失败的情况。
修正后的代码
import java.util.Scanner; import java.io.FileWriter; import java.io.IOException; public class Answer { static Scanner input = new Scanner(System.in); public static void main(String[] args) { System.out.println("What ip?"); String ip = input.nextLine(); System.out.println("message?"); String message = input.nextLine(); System.out.println("ip is " + ip + "?"); System.out.println("message is " + message + "?"); try { // 修正路径分隔符 FileWriter writer = new FileWriter("\\\\JOSHY-PC\\Users\\joshy\\Desktop\\New folder (4)\\message.txt"); writer.write(ip + message ); writer.close(); System.out.println("文件写入成功"); } catch (IOException e) { e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者Joshua Gayhart
相关产品推荐
相关产品推荐

