Vor kurzem habe ich die Notwendigkeit festgestellt, Dateien während der Sanierung auf Linux -Server hochzuladen, und jetzt habe ich die Codenotizen ausgeklärt.
Diese Verbindungsmethode berücksichtigt das Problem der Parallelität, und beim Erstellen einer FTP -Verbindung wird jedes Verbindungsobjekt in gespeichert
ThreadLocal <FTP>, um sicherzustellen, dass jeder Thread keinen Einfluss auf das Öffnen und Schließen von FTP hat.
Paket com.test.utils; import Java.io.BufferedInputStream; Import java.io.file; import Java.io.filefilter; Import Java.io.FileInputStream; Import Java.io.inputStream; Import Java.util.Arraylist; Importe Java.util.Date; org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; import com.jcraft.jsch.channelsftp; com.jcraft.jsch.jsch; LogFactory.getLog (ftp.class); privates statisches Datum last_push_date = null; private Sitzung sshSession; privater Kanalkanal; private statische ThreadLocal <Ftp> sftPlocal = new ThreadLocal <Ftp> (); private FTP (String -Host, int Port, String -Benutzername, String -Passwort) löst eine Ausnahme aus {jsch jsch = new JSCH (); jsch.getSession (Benutzername, Host, Port); // Sitzung sshSession = jsch.getSession (Benutzername, Host, Port); sshSession.setPassword (Passwort); // Ändern Sie den Wert der GSSAPIAuthentication auf dem Server/etc/ssh/sshd_config auf Ja zu Nein, was die Unfähigkeit des Benutzers löst, sich in der remote SSHSession.setConfig ("UserAuth.gssapi-with-mic", "no") anzumelden. // Eigenschaften für das Sitzungsobjekt festlegen. Wenn Sie zum ersten Mal auf den Server zugreifen, müssen Sie nicht yes sshSession.setConfig ("StrictHostKeyChing", "Nein") eingeben. sshSession.connect (); // Holen Sie sich den SFTP Channel Channel = (Channelsftp) sshSession.openchannel ("sftp"); Channel.Connect (); logger.info ("Verbundene FTP erfolgreich!" + sshSession); } / ** * ist es verbunden * * @return * / private boolean isconnected () {return null! = Channel && Channel.isconnected (); } /** * Holen Sie sich den SFTP -Client, der im lokalen Thread gespeichert ist if (null == sftputil ||! } return sftPlocal.get (); } / *** Veröffentlichung des SFTP -Clients, der den lokalen Thread speichert* / public static void Release () {if (null! logger.info ("close connection" + sftPlocal.get (). sshSession); sftPlocal.set (null); }} / ** * Kanal schließen * * @throws Exception * / public void closechannel () {if (null! = Channel) {try {Channel.disconnect (); } catch (Ausnahme e) {logger.Error ("Ausnahme beim Schließen des SFTP -Kanals:", e); }} if (null! = sshSession) {try {sshSession.disconnect (); } catch (Ausnahme e) {logger.Error ("SFTP -Session -Ausnahme:", e); }}} /*** @param -Verzeichnis Das Verzeichnis zum Hochladen von FTP* @param UploadFile Local Dateiverzeichnis** /public void Upload (String -Verzeichnis, String UploadFile) löst Ausnahme aus {try {<br> // Ausführungslisten -Anzeige ls -Befehlskanal.ls (Directory); List <Datei> file = getFiles (UploadFile, New ArrayList <Datei> ()); für (int i = 0; i <files.size (); i ++) {file file = file.get (i); InputStream input = new buferedInputStream (neuer FileInputStream (Datei)); Channel.put (input, file.getName ()); try {if (input! = null) input.close (); } catch (Ausnahme e) {e.printstacktrace (); logger.Error (Datei.getName () + "Ausnahme beim Schließen der Datei ... Ausnahme!" + e.getMessage ()); } if (file.exists ()) {boolean b = file.delete (); logger.info (Datei.getName () + "Datei hochgeladen! Löschen ID:" + b); }}}} catch (Ausnahme e) {logger.Error ("[Subdirektorie wird erstellt]:", e); // subdirectory Channel erstellen.mkdir (Verzeichnis); }} // Datei öffentliche Liste <Datei> getFiles (String RealPath, List <Datei> Dateien) {Datei realfile = new Datei (RealPath); if (realFile.isdirectory ()) {file [] subfiles = realfile.listfiles (new FileFilter () {@Override public boolean Accept (Dateidatei) {if (null == last_push_date) {return true;} else {long modifydate = teasttime }); für (Dateidatei: Unterfilme) {if (isdirectory ()) {getFiles (file.getabsolutepath (), Dateien); } else {file.add (Datei); } if (null == last_push_date) {last_push_date = new Date (Datei.lastModified ()); } else {long modifyDate = file.lastModified (); if (modifyDate> last_push_date.getTime ()) {last_push_date = new Date (modifyDate); }}}} Rückgabedateien; }}Zusammenfassen
Das obige ist die Java Remote -Verbindung zum Linux -Server, die vom Editor eingeführten Befehle ausführen und hochladen Dateien. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird alle rechtzeitig antworten!