Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Samba JCIFS使用Java访问文件_Java_Protocols_Smb_Jcifs - Fatal编程技术网

通过Samba JCIFS使用Java访问文件

通过Samba JCIFS使用Java访问文件,java,protocols,smb,jcifs,Java,Protocols,Smb,Jcifs,我有一个关于使用Samba JCIFS访问文件的问题 我想访问一个服务器,我们称之为server.unv.edu,工作组是WKGRP 此服务器中有一个共享:\\server.unv.edu\pcb$ 我尝试访问服务器的方式是: public class SMBAuthenticator extends NtlmAuthenticator { private String username = "username"; private String password = &qu

我有一个关于使用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);
}

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

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)
jcifs.smb.SmbAuthException:登录失败:未知用户名或错误密码。
位于jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:544)
位于jcifs.smb.SmbTransport.send(SmbTransport.java:661)
位于jcifs.smb.SmbSession.sessionSetup(SmbSession.java:390)
位于jcifs.smb.SmbSession.send(SmbSession.java:218)
位于jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
位于jcifs.smb.SmbFile.doConnect(SmbFile.java:929)
位于jcifs.smb.SmbFile.connect(SmbFile.java:954)
位于jcifs.smb.SmbFile.connect0(SmbFile.java:880)
在jcifs.smb.SmbFile.open0(SmbFile.java:972)
位于jcifs.smb.SmbFile.open(SmbFile.java:1006)
在jcifs.smb.SmbFileInputStream。(SmbFileInputStream.java:73)
在jcifs.smb.SmbFileInputStream。(SmbFileInputStream.java:65)
位于jcifs.smb.SmbFile.getInputStream(SmbFile.java:2844)
位于edu.umd.lib.sambaConnection.SMBConnection.getsmbiputstream(SMBConnection.java:33)
位于edu.umd.lib.sambaConnection.SMBConnection.getInputStream(SMBConnection.java:37)
在edu.umd.lib.sambaConnection.SambaConnectionTest.test(SambaConnectionTest.java:21)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:44)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:41)
位于org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
位于org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:236)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

有人能给我一个建议或我的代码的正确性,以帮助我访问该文件吗?

你让这件事变得更难了。请按照以下步骤操作,并确保您正在创建的共享文件夹对此用户具有写入权限

  • 下载jar文件(只有一个jar文件)
  • 复制并粘贴下面的代码和您的用户名、密码和共享文件夹信息,这就是您所需要的
  • 我在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 !");
    

    }

    我将首先针对本地文件(或您刚刚创建的共享)测试代码,然后尝试使用远程服务器。这样,您就可以确保您的代码是正确的,而不是其他东西(如权限)。是否有办法检查身份验证是否成功?我试过使用
    auth.equals(true)
    ,但即使身份验证成功,它似乎也不会返回任何信息。我有一个带usb连接的路由器。我连接了一个硬盘。Mac OS可以直接访问它。我想用Java访问它,但我不知道用户名和密码。我怎么才能知道呢?例如,文件夹如下所示:smb://air5750nas/KORAY/Diziler 但是OSX使用的用户名密码是什么?我在哪里可以获得用户并传入Samba服务器?包com.wellsfargo。。。真正地富国银行是否同意您将其复制/粘贴到公共空间?
        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 !");
    
    /** You can simply use this util class for read write operations. **/
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.MalformedURLException;
    import java.net.UnknownHostException;
    import java.nio.charset.StandardCharsets;
    
    import jcifs.smb.NtlmPasswordAuthentication;
    import jcifs.smb.SmbException;
    import jcifs.smb.SmbFile;
    import jcifs.smb.SmbFileInputStream;
    import jcifs.smb.SmbFileOutputStream;
    
    public class NDMUtil {
    
    public static void writeToNDM(String userName, String password, String domain, String sharedPath,
            String textToWrite) throws MalformedURLException, SmbException, UnknownHostException, IOException {
        NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication(domain, userName, password);
        try (OutputStream out = new SmbFileOutputStream(new SmbFile(sharedPath, authentication))) {
            byte[] bytesToWrite = textToWrite.getBytes();
            if (out != null && bytesToWrite != null && bytesToWrite.length > 0) {
                out.write(bytesToWrite);
            }
        }
        ;
    }
    
    public static String readFromNDM(String userName, String password, String domain, String sharedPath)
            throws MalformedURLException, SmbException, IOException {
        NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication(domain, userName, password);
        String fileContent = IOUtil.toString(new SmbFileInputStream(new SmbFile(sharedPath, authentication)),
                StandardCharsets.UTF_8.name());
        System.out.println(fileContent);
        return fileContent;
    }