2011-10-14 1 views
20

J'ai une question concernant l'accès au fichier avec Samba JCIFS. Donc, il y a un serveur auquel je veux accéder, appelons-le server.unv.edu et le groupe de travail est WKGRP. il y a une part de ce serveur: \\ server.unv.edu \ pcbaccéder au fichier en utilisant Java avec Samba JCIFS

$

la façon dont je suis en train 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 correction? s de mon code, pour m'aider à accéder au fichier?

Merci beaucoup.

+0

Je voudrais d'abord tester le code par rapport à un fichier local (ou un partage que vous venez de créer), puis essayez avec le serveur distant. Ceci, afin que vous puissiez vous assurer que votre code est OK, et n'est pas quelque chose d'autre (comme les permissions). – jmend

Répondre

39

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écharger le fichier jar http://jcifs.samba.org/ (il n'y a qu'un seul fichier jar)
  2. copier et coller le code ci-dessous avec vos informations pour le nom d'utilisateur, mot de passe et le dossier partagé et c'est que vous avez tous besoin

Je l'exécutais sur Linux et je voulais écrire dans une boîte Windows afin que vous vouliez 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 ... utiliser 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 !"); 
+0

Y at-il un moyen de savoir si l'authentification a été réussie ou noy? J'ai essayé avec 'auth.equals (true)', mais il ne semble pas retourner quelque chose même si l'authentification a été réussie. –

+0

J'ai un routeur avec une connexion USB. J'ai connecté un disque dur à cela. Mac OS peut y accéder directement. Je veux y accéder avec Java, mais je ne connais pas le nom d'utilisateur et le mot de passe. Comment puis-je le découvrir? Le dossier par exemple est ici: smb: // air5750nas/KORAY/Diziler Mais quel est le mot de passe utilisé par OSX? –

Questions connexes