2017-06-28 2 views
1

Ich habe den folgenden Code versucht: java.io.FileNotFoundException: \\remotehost\SharedPath\comp\NG\Test.txt (Logon failure: unknown user name or bad password)Wie kopiert/transferiert man eine Datei vom Windows Server Pfad zum Linux Server Pfad?

Bitte beachten Sie:

  • Ich bin in der Lage, die Dateien in der lesen

    String url = "smb://remotehost/SharedPath/Comp/NG/"; 
    NtlmPasswordAuthentication auth2 = new 
    NtlmPasswordAuthentication(null,"user", "password"); 
    SmbFile dir = new SmbFile(url, auth); 
    for (SmbFile f : dir.listFiles()) 
    { 
        if(f.getName().contains("Test")) //successfully reads the file 
        { 
        System.out.println("test...."+f); 
        filename= f.getUncPath(); 
        System.out.println("filename...."+filename); 
        sftpChannel.put(filename, remoteDirectory); // throws exception 
        } 
    } 
    

    Above Code führt Ausnahme wie folgt Remote-Server, der den obigen Code verwendet, aber nicht in der Lage ist, die Datei vom Remote-Serverpfad zum Linux-Serverpfad zu kopieren oder zu übertragen.

  • Da die Verbindung zu Remote-Server und Linux-Server erfolgreich war, habe ich versucht, die Datei direkt vom Remote-Pfad zum Linux-Server-Pfad zu kopieren, indem sftpchannel.put() aber Ausnahme ausgelöst wird.

  • Sind wir nach der Verbindung mit smb nicht in der Lage, direkt mit dem freigegebenen Pfad unter der URL zu verbinden? String url = "//remotehost/SharedPath/Comp/NG/";

Bitte beachten Sie: Ich Linux-Server anschließe Bibliothek jsch und ich bin in der Lage erfolgreich auf Linux-Server zu verbinden sftpChannel.connect mit(); und auch in der Lage, die Datei von meinem lokalen Rechner zu Linux-Server mit sftpChannel.put (localpath, linuxpath); und Um mich mit Windows Server zu verbinden benutze ich smbFile. Ich bin in der Lage zu verbinden, aber nicht in der Lage, die Datei von Windows zu Linux Server-Pfad zu kopieren. Ich versuchte mit sftpChannel.put (Dateiname, remoteDirectory); für dasselbe, aber es hat in der Ausnahme geführt. In diesem speziellen Schritt ging ich davon aus, dass die Verbindung zum Windows Server erfolgreich ist und ich die Dateien kopieren kann. Ich kann die Datei lesen, aber nicht kopieren. Nicht sicher, warum das passiert.

Kann jemand mir die richtigen Schritte zur Verfügung stellen?

+0

Beim Lesen des Verzeichnisses verwenden Sie diese 'SmbFile' Klasse und stellen Authentifizierungsdaten für sie bereit, so dass es funktioniert. Wenn Sie versuchen, zu kopieren, verwenden Sie den 'sftChannel', der eine völlig andere Klasse ist. Wie sollte es die Authentifizierungsdaten kennen? Ich bin nicht vertraut mit diesen Klassen, aber Sie müssen wahrscheinlich den Inhalt Ihrer Datei über die 'SmbFile'-Klasse lesen und speichern Sie es im Speicher oder in einer lokalen Datei, und dann sftp kopieren Sie es auf das Ziel von Ihrem Speicher-Array oder lokale Datei. –

+0

Wie ich sehe, hat die 'SmbFile' Klasse eine' getInputStream() 'Methode, so dass ihr InputStream benutzt werden kann um die Datei zu lesen. Ich kann in Ihrem Beispiel nicht sehen, was ist der Typ dieser 'sftChannel' Variable –

+0

@ BalázsNemes Sorry, ich habe nicht den vollständigen Code zur Verfügung gestellt. Ich habe nur den Code zur Verfügung gestellt, der zu einer Ausnahme geführt hat. – user2852305

Antwort

1

Ich denke, der Typ sftpChannel ist com.jcraft.jsch.ChannelSftp. Dann wird die folgende Methode die Kopie für Sie tun. Natürlich müssen Sie die Objekte SmbFile und ChannelSftp ordnungsgemäß als Parameter initialisieren.

public void copyFromSmbToSftp(SmbFile smbFile, ChannelSftp channelSftp, String destPath) throws IOException, SftpException { 
    try(BufferedInputStream inputStream = new BufferedInputStream(smbFile.getInputStream()); 
     BufferedOutputStream outputStream = new BufferedOutputStream(channelSftp.put(destPath))){ 
     byte[] buffer = new byte[64*1024]; 
     int bytesRead; 
     while((bytesRead=inputStream.read(buffer, 0, buffer.length))!=-1){ 
     outputStream.write(buffer, 0, bytesRead); 
     } 
    } 
    } 
Verwandte Themen