web-dev-qa-db-ja.com

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)

ファイルへのアクセスを支援するために、誰でもコードの提案や正確性を教えてもらえますか?

どうもありがとうございます。

21
Allan Jiang

これを本来よりも難しくしている。以下の手順に従って、作成している共有フォルダーに、使用しているこのユーザーの書き込みアクセス権があることを確認してください。

  1. jarファイルをダウンロードします http://jcifs.samba.org/ (jarファイルは1つだけです)
  2. 以下のコードをコピーして、ユーザー名、パスワード、共有フォルダーの情報を貼り付けます。必要なのはこれだけです

私はこれをLinuxで実行していたので、Windowsボックスに書き込みたいので、共有フォルダを作成し、Windowsで共有フォルダを作成する方法がわからない場合は以下の変数に共有フォルダ名を入れたい...いつものように

    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 !");
44
grepit