使用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.<init>(SmbFileInputStream.java:73)

at jcifs.smb.SmbFileInputStream.<init>(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 !");

以上是 使用Java和Samba JCIFS访问文件 的全部内容, 来源链接: utcz.com/qa/421124.html

回到顶部