使用Java和Samba JCIFS访问文件

我有一个关于使用Samba JCIFS访问文件的问题。 所以有一个我想访问的服务器,我们称之为server.unv.edu,工作组是WKGRP。 此服务器中有一个共享:\\ server.unv.edu \ pcb $

我试图访问服务器的方式是:

public class SMBAuthenticator extends NtlmAuthenticator{ private String username = "username"; private String password = "password"; private String domain = "smb://server.unv.edu/WKGRP/"; public SMBAuthenticator(){ NtlmAuthenticator.setDefault(this); } 

 public class SMBConnection{ public String urlString = "smb://server.unv.edu/pcb$/path/file.txt"; NtlmPasswordAuthentication auth; SmbFile smbFile; public SMBConnection() throws MalformedURLException{; //url = new URL(urlString); SMBAuthenticator authenticator = new SMBAuthenticator(); auth = authenticator.getNtlmPasswordAuthentication(); smbFile = new SmbFile(urlString, auth); } public InputStream getSMBInputStream() throws IOException{ return this.smbFile.getInputStream(); } public InputStream getInputStream() throws IOException{ InputStream is = this.getSMBInputStream(); return is; } } 

但这不起作用。我得到了一个错误

 jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password. at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:544) at jcifs.smb.SmbTransport.send(SmbTransport.java:661) at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:390) at jcifs.smb.SmbSession.send(SmbSession.java:218) at jcifs.smb.SmbTree.treeConnect(SmbTree.java:176) at jcifs.smb.SmbFile.doConnect(SmbFile.java:929) at jcifs.smb.SmbFile.connect(SmbFile.java:954) at jcifs.smb.SmbFile.connect0(SmbFile.java:880) at jcifs.smb.SmbFile.open0(SmbFile.java:972) at jcifs.smb.SmbFile.open(SmbFile.java:1006) at jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:73) at jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:65) at jcifs.smb.SmbFile.getInputStream(SmbFile.java:2844) at edu.umd.lib.sambaConnection.SMBConnection.getSMBInputStream(SMBConnection.java:33) at edu.umd.lib.sambaConnection.SMBConnection.getInputStream(SMBConnection.java:37) at edu.umd.lib.sambaConnection.SambaConnectionTest.test(SambaConnectionTest.java:21) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

任何人都可以给我一个建议或我的代码的正确性,以帮助我访问该文件?

非常感谢。

你正在努力使它变得更加困难。 请按照以下步骤操作,确保您正在创建的共享文件夹具有您正在使用的此用户的写入权限。

  1. 下载jar文件http://jcifs.samba.org/ (只有一个jar文件)
  2. 将以下代码与用户名,密码和共享文件夹的信息一起复制并粘贴,这就是您所需要的

我在Linux上运行它并希望写入Windows框,因此如果您不知道如何在Windows上创建共享文件夹,则需要创建共享文件夹并将共享文件夹名称放在下面的变量中…使用google一如既往

  String user = "your_user_name"; String pass ="your_pass_word"; String sharedFolder="shared"; String path="smb://ip_address/"+sharedFolder+"/test.txt"; NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass); SmbFile smbFile = new SmbFile(path,auth); SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile); smbfos.write("testing....and writing to a file".getBytes()); System.out.println("completed ...nice !");