web-dev-qa-db-fra.com

accès au fichier en utilisant Java avec Samba JCIFS

J'ai une question sur l'accès au fichier avec Samba JCIFS. Il y a donc un serveur auquel je veux accéder, appelons-le server.unv.edu et le groupe de travail est WKGRP. il y a un partage sur ce serveur: \\ server.unv.edu\pcb $

la façon dont j'essaye d'accéder au serveur est:

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

et

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

mais cela ne fonctionne pas. et j'ai eu une erreur de

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)

Quelqu'un peut-il me donner une suggestion ou une exactitude de mon code, pour m'aider à accéder au fichier?

Merci beaucoup.

21
Allan Jiang

Vous rendez cela plus difficile qu'il ne devrait l'être. Veuillez suivre les étapes ci-dessous et assurez-vous que le dossier partagé que vous créez a un accès en écriture pour cet utilisateur que vous utilisez.

  1. téléchargez le fichier jar http://jcifs.samba.org/ (il n'y a qu'un seul fichier jar)
  2. copiez et collez le code ci-dessous avec vos informations pour le nom d'utilisateur, le mot de passe et le dossier partagé et c'est tout ce dont vous avez besoin

J'exécutais cela sur Linux et je voulais écrire dans une boîte Windows afin que vous souhaitiez créer un dossier partagé et mettre le nom du dossier partagé dans la variable ci-dessous si vous ne savez pas comment créer un dossier partagé sur Windows ... utilisez google comme toujours

    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