2012-07-30 2 views
5

Sto cercando di leggere un file remoto in javaLeggere file remoto in Java, che ha bisogno di username e password

File f = new File("//192.168.1.120/home/hustler/file.txt"); 

La macchina remota ha bisogno di un nome utente e password per permettermi di accedere al file.

C'è un modo per passare i parametri attraverso il codice java e leggere il file?

+2

la seguente potrebbe essere utile: http://stackoverflow.com/q/208839/1311351 –

+0

Questa è una buona fonte, ma il codice deve funzionare in una macchina Linux e Windows – jaysun

risposta

1

Ecco il codice, ho scritto e funziona perfettamente.

File f=new File("abc.txt"); //Takes the default path, else, you can specify the required path 
      if(f.exists()) 
      { 
       f.delete(); 
      } 
      f.createNewFile(); 
      FileObject destn=VFS.getManager().resolveFile(f.getAbsolutePath()); 
      UserAuthenticator auth=new StaticUserAuthenticator("", "myusername", "secret_password"); 
      FileSystemOptions opts=new FileSystemOptions(); 
      DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth); 
      FileObject fo=VFS.getManager().resolveFile("\\\\192.168.0.1\\direcory\\to\\GetData\\sourceFile.txt",opts); 
      destn.copyFrom(fo,Selectors.SELECT_SELF); 
      destn.close(); 

Ora è possibile utilizzare il file per eseguire le operazioni richieste. Qualcosa di simile ...

InputStream is=new FileInputStream(f); 
+0

Stai copiando il file localmente prima di leggere dalla copia locale? Questo è abbastanza inefficiente ... – Matthieu

+0

come posso aggiungere questo percorso di classe ?? –

2

Puoi anche provare Commons VSF. Controllo UserAuthenticator

+0

Grazie, ha funzionato come un fascino, ho pubblicato il codice come risposta. Grazie ancora – jaysun

7
package com.eiq; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import org.apache.commons.vfs.FileObject; 
import org.apache.commons.vfs.FileSystemOptions; 
import org.apache.commons.vfs.Selectors; 
import org.apache.commons.vfs.UserAuthenticator; 
import org.apache.commons.vfs.VFS; 
import org.apache.commons.vfs.auth.StaticUserAuthenticator; 
import org.apache.commons.vfs.impl.DefaultFileSystemConfigBuilder; 
public class RemoteFileDemo { 
public static void main(String[] args) throws IOException { 

    String domain="hyd\\all"; 
    String userName="chiranjeevir"; 
    String password="[email protected]"; 
    String remoteFilePath="\\\\10.0.15.74\\D$\\Suman\\host.txt"; 



    File f=new File("E:/Suman.txt"); //Takes the default path, else, you can specify the required path 
    if(f.exists()) 
    { 
     f.delete(); 
    } 
    f.createNewFile(); 
    FileObject destn=VFS.getManager().resolveFile(f.getAbsolutePath()); 

    //domain, username, password 
    UserAuthenticator auth=new StaticUserAuthenticator(domain, userName, password); 
    FileSystemOptions opts=new FileSystemOptions(); 
    DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth); 


    FileObject fo=VFS.getManager().resolveFile(remoteFilePath,opts); 

    System.out.println(fo.exists()); 

    //fo.createFile(); 

    destn.copyFrom(fo,Selectors.SELECT_SELF); 
    destn.close(); 

    //InputStream is=new FileInputStream(f); 

} 
} 

Questo è un programma per leggere un file dalla macchina remota e conservarlo nella nostra macchina locale come file di E:/Suman.txt.

Fare attenzione durante la scrittura il percorso del file significa invece che : dobbiamo sostituirlo con $ simbolo, ad es .: D:\Suman\Boorla\kpl.txt è sbagliato, D$\\Suman\\Boorla\\kpl.txt è giusto.

Nel programma precedente, è necessario modificare il nome del dominio, il nome utente, la password e il percorso del file della macchina remota. Per lavorare con il programma di cui sopra, è necessario aggiungere i seguenti file jar nel classpath.

commons-vfs.jar 
commons-logging.jar 
+1

come posso aggiungere questo percorso di classe ?? –

4

un'altra alternativa con jCIFS si può facilmente specificare i parametri di autenticazione:

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "user", "password"); // Authentication info here, domain can be null 
try (InputStream is = new SmbFile("smb://192.168.1.120/home/hustler/file.txt", auth).getInputStream()) { 
    // Read from 'is' ... 
} catch (IOException e) { 
    // Handle IOException 
}