2017-08-31 55 views
0

我試圖讀取共享驅動器文件,但我得到一個錯誤無法使用JCIFS API在Java中

jcifs.smb.SmbException讀取共享驅動器文件:無法連接到服務器 java.net。 UnknownHostException:.. MSBROWSE。 < 01>

我累了幾件事,但似乎沒有任何工作。我將System.out.println(sFile.canRead())視爲true,這意味着連接成功。

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拋出錯誤=新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 
+0

不知道如果你的語法正確 NtlmPasswordAuthentication:語法:域;用戶名:密碼,其中域可以爲空 – Theo

回答

0

這對我的作品

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; 
}