【问题标题】:Unable to read file from shared drive using jcifs api in java无法在 java 中使用 jcifs api 从共享驱动器读取文件
【发布时间】:2017-08-31 10:26:01
【问题描述】:

我正在尝试从共享驱动器读取文件,但出现错误

jcifs.smb.SmbException: 连接服务器失败 java.net.UnknownHostException: ..MSBROWSE.

我已经厌倦了一些东西,但似乎没有任何工作。我得到 System.out.println(sFile.canRead()) 这是真的,这意味着连接成功。

public void readFilefromSharedDrive() throws IOException {
        String user = "user" + ":" + "pwd";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
        SmbFile sFile = null;
        try {
            sFile = new SmbFile("smb:///ip//path//filname.txt", auth);
            System.out.println(sFile.canRead());
            byte[] buffer = new byte[1024];
            try (SmbFileInputStream in = new SmbFileInputStream(sFile)) {
                int bytesRead = 0;
                do {
                    bytesRead = in.read(buffer);
                    // here you have "bytesRead" in buffer array
                } while (bytesRead > 0);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "ERROR: " + e);
            }
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }
    }

它在 SmbFileInputStream in = new SmbFileInputStream(sFile) 处抛出错误

jcifs.smb.SmbException: Failed to connect to server
java.net.UnknownHostException: ..__MSBROWSE__.<01>
    at jcifs.netbios.NbtAddress.doNameQuery(NbtAddress.java:317)
    at jcifs.netbios.NbtAddress.getByName(NbtAddress.java:422)
    at jcifs.netbios.NbtAddress.getByName(NbtAddress.java:403)
    at jcifs.smb.SmbFile.getFirstAddress(SmbFile.java:845)
    at jcifs.smb.SmbFile.connect(SmbFile.java:946)
    at jcifs.smb.SmbFile.connect0(SmbFile.java:875)
    at jcifs.smb.SmbFile.open0(SmbFile.java:965)
    at jcifs.smb.SmbFile.open(SmbFile.java:999)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:73)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:65)
    at jcifs.smb.SmbFile.getInputStream(SmbFile.java:2833)
    at java.net.URLConnection.getContent(URLConnection.java:739)
    at 

【问题讨论】:

  • 不确定你的语法是否正确 NtlmPasswordAuthentication: syntax: domain;username:password where domain can be null

标签: java file smb jcifs


【解决方案1】:

这对我有用

 SmbFile smbfile = getSmbFile(newpath, getCredentials(user, password));

     public NtlmPasswordAuthentication getCredentials(String usr, String pwd) {
    NtlmPasswordAuthentication credentials = null;
    if(usr.length()==0){
        credentials = NtlmPasswordAuthentication.ANONYMOUS;
    }else {
        credentials = new NtlmPasswordAuthentication(null, usr,
                pwd);
    }
    return credentials;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-22
    • 2012-11-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多