Java程序本地正常,局域网设备文件访问连接失败求助
局域网共享文件访问错误排查与解决
我开发的Java程序访问本地文件完全正常,但访问局域网内设备时出现指定网络机器地址的连接错误,仅本地运行正常,求问题原因及解决办法。
相关代码
Main.java
import javax.swing.*; import java.awt.*; import java.io.FileNotFoundException; import java.util.Arrays; public class Main { public static String machinename; public static void main(String[] args) { //Jframe components are defined here JFrame frame = new JFrame ("La tikets"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(650 , 300); JPanel panel = new JPanel(); // el panel no está visible en la salida JPanel panel2 = new JPanel(); // el panel no está visible en la JLabel Label1 = new JLabel("Introducir nombre de la maquina"); JLabel WordCountLabel = new JLabel("Cantidad"); JButton Buscar = new JButton("Buscar"); JButton restablecer = new JButton("Restablecer"); JTextField tf = new JTextField(15); // Componentes are added to the panels here panel.add(Label1); panel.add(tf); panel.add(Buscar); panel.add(restablecer); panel2.add(WordCountLabel); frame.getContentPane().add(BorderLayout.PAGE_START, panel); frame.getContentPane().add(BorderLayout.PAGE_END, panel2); frame.setVisible(true); //action button listener for run the (DevolverValor) function Buscar.addActionListener(e -> { try { machinename = tf.getText(); DevolverValor.Leer(machinename); WordCountLabel.setText("Tikets impresos: "+DevolverValor.Leer(Arrays.toString(args))); } catch (FileNotFoundException ex) { throw new RuntimeException(ex); } }); restablecer.addActionListener(e -> tf.setText("")); } }
DevolverValor.java
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class DevolverValor { public static int Leer(String machinename) throws FileNotFoundException { String WordToSearch = "Data:"; int wordCount = 0; File text = new File("\\\\"+machinename+"\\C$\\SITA\\Logs\\BlaServer\\BSIA.log.1"); Scanner s = new Scanner(text); while (s.hasNext()) { if (s.next().equals(WordToSearch)) { wordCount++; } } System.out.println(machinename); return wordCount; } }
报错信息
java.io.FileNotFoundException: \\[目标机器名]\C$\SITA\Logs\BlaServer\BSIA.log.1 (指定的网络名不再可用。)
问题原因及解决办法
1. 代码逻辑错误
- 按钮监听部分存在冗余且错误的调用:当前代码先传入正确的
machinename调用Leer方法,随后又错误地传入Arrays.toString(args)(命令行参数的字符串形式)再次调用,导致第二次访问路径完全错误。修改后的正确代码如下:Buscar.addActionListener(e -> { try { machinename = tf.getText(); int ticketCount = DevolverValor.Leer(machinename); WordCountLabel.setText("Tikets impresos: "+ticketCount); } catch (FileNotFoundException ex) { JOptionPane.showMessageDialog(frame, "访问失败:"+ex.getMessage()); ex.printStackTrace(); } }); - 建议添加异常弹窗提示,方便用户直接看到错误信息,而不是仅在后台抛异常。
2. 共享权限与配置问题
- 目标机器默认共享验证:确认目标机器的
C$默认共享已开启(右键「此电脑」→「管理」→「共享文件夹」→「共享」,查看C$状态)。若未开启,可手动开启,或直接共享目标文件夹C:\SITA\Logs\BlaServer,并给访问账号分配读取权限。 - 账号权限验证:手动在资源管理器输入
\\[目标机器名]\C$,测试当前登录账号能否访问目标机器的共享目录。若无法访问,需在目标机器上给当前账号添加管理员权限,或在共享文件夹的权限设置中添加该账号的读取权限。
3. 网络与系统限制
- 网络连通性检查:使用
ping [目标机器名/IP]命令测试两台机器是否能正常通信,排除局域网断连问题。 - 防火墙拦截处理:关闭本地和目标机器的防火墙(或在防火墙规则中添加允许SMB协议的条目),Windows文件共享依赖SMB协议,容易被防火墙拦截。
- SMB服务状态检查:在目标机器上运行
services.msc,找到「Server」服务,确认其已启动且启动类型为「自动」。
内容的提问来源于stack exchange,提问作者Lozeer55
相关产品推荐
相关产品推荐

