You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:55:24