Basierend auf Apache FTP müssen beim Hochladen von Dateien die folgenden Probleme berücksichtigt werden (das Beispiel ist die Fortsetzung der Funktion):
(1) Ob der FTP -Server eine Verzeichnisänderung hat, müssen Sie ein Verzeichnis erstellen, wenn dies nicht vorhanden ist.
(2) Bestimmen Sie, ob die hochgeladene Datei bereits vorhanden ist. Wenn es vorhanden ist, muss es gelöscht werden, bevor Sie hochgeladen oder weiter übertragen werden?
1. Laden Sie die Aufzählungsklasse hoch oder laden Sie sie herunter:
Paket com.scengine.wtms.utils.ftp; public enum UploadStatus { File_Exits(0), Create_Directory_Success(1), Create_Directory_Fail(2), Upload_From_Break_Success(3), Upload_From_Break_Faild(4), Download_From_Break_Success(5), Download_From_Break_Faild(6), Upload_New_File_Success (7), Upload_New_File_Failed (8), Delete_Remote_Success (9), Delete_Remote_Faild (10), Remote_Bigger_Local (11), Remote_Smaller_locall (12); privater Int -Status; public int getStatus () {Rückgabestatus; } public void setStatus (int Status) {this.status = Status; } UploadStatus (int Status) {this.status = Status; }}2. Werkzeugcode:
Paket com.scengine.wtms.utils.ftp; Import Java.io.file; import Java.io.FileInputStream; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren java.io.inputstream; importieren java.io.outputstream; Import Java.io.printwriter; import org.apache.commons.net.printcommandListener; import org.apache.commons.net.ftp.ftp; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpfile; import org.apache.commons.net.ftp.ftpreply; public class continftp {private ftpclient ftpclient = new ftpclient (); / *** Einstellungen für Objektkonstruktionen geben die im Prozess verwendeten Befehle an die Konsole*/ public continftp () {this.ftpclient.addProtocolcommandListener (New PrintCommandListener (New Princorwriter (System.Out))) aus; } / ** * * Wird verwendet, um eine Verbindung zum FTP -Server in Java -Programmierung herzustellen ftpclient.connect (Hostname, Port); if (ftpreply.ispositiveCompletion (ftpclient.getReplyCode ())) {if (ftpclient.login (Benutzername, Passwort)) {return true; }} disconnect (); false zurückgeben; } / ** * * Datei vom FTP -Server herunterladen * * @param remote * Remote -Dateipfad * * @param local * Local File Path * * @return, ob erfolgreich * * @throw ioException * / @SuppressWarnings ("Ressourcen") public boolean download (String Remote, String Local) IOException {{ftpclient.enterLocalpacting (). ftpclient.setFiletype (ftp.Binary_file_type); boolescher Ergebnis; Datei f = neue Datei (lokal); Ftpfile [] files = ftpclient.listfiles (remote); if (Dateien.length! = 1) {System.out.println ("Remote -Datei ist nicht eindeutig"); false zurückgeben; } long lremoteSize = Dateien [0] .GetSize (); if (f.Exists ()) {outputStream out = new FileOutputStream (f, true); System.out.println ("Die lokale Dateigröße ist:" + f.length ()); if (f.length ()> = lremotesize) {System.out.println ("Die lokale Dateigröße ist größer als die Remotedateigröße, download abgebrochen"); false zurückgeben; } ftpclient.setRestartOffset (f.length ()); result = ftpclient.retrieveFile (fern, out); out.close (); } else {outputStream out = new FileOutputStream (f); result = ftpclient.retrieveFile (fern, out); out.close (); } Rückgabeergebnis; }/** * * Die Datei auf den FTP-Server hochladen, unterstützen Sie den Breakpoint Continuous Transmission * * @param Local * Lokaler Dateiname, absoluter Pfad * * @param remote * Remote-Dateipfad, Verwendung /home/Directory1/subdirectory/file.ext * EXTER EXTRADE. @throws ioException */ @Suppresswarnings ("Ressource") public uploadStatus upload (String Local, String Remote) löst IOException {// PISPIVEMODE fest, um ftpclient.enterLocalpassivemode () zu übertragen; // ftpclient.setFiletype (ftp.bary_file_type) festlegen; UploadStatus -Ergebnis; // Verarbeitung der Remote -Verzeichnisse String remoteFileName = remote; if (remote.contains ("/")) {remoteFileName = remote.substring (remote.lastIndexof ("/") + 1); String Directory = remote.substring (0, remote.lastIndexof ("/") + 1); if (! Directory.EqualsignoreCase ("/") &&! int End = 0; if (verzeichnis.startswith ("/")) {start = 1; } else {start = 0; } end = directory.indexof ("/", starten); while (true) {string subdirectory = remote.substring (start, ende); if (! ftpclient.ChangeWorkingDirectory (Subdirectory)) {if (ftpclient.makedirectory (subdirectory)) {ftpclient.ChangeWorkingDirectory (Subdirectory); } else {System.out.println ("Erstellen Sie das Verzeichnis nicht erstellen"); return uploadStatus.create_directory_fail; }} start = end + 1; end = directory.indexof ("/", start); // Überprüfen Sie, ob alle Verzeichnisse erstellt wurden, wenn (end <= start) {break; }}}} // prüfen, ob die Datei in der Remote ftpfile [] files = ftpclient.listfiles (remoteFileName) vorhanden ist; if (files.length == 1) {long remotesize = files [0] .GetSize (); Datei f = neue Datei (lokal); long localSize = f.length (); if (remoteSize == localSize) {return uploadStatus.file_exits; } else if (remotesize> localSize) {return uploadStatus.remote_bigger_local; } // Versuchen Sie, den Zeiger in der Datei zu verschieben, um die Unterbrechung des Breakpoint InputStream zu erkennen. if (is.skip (remotesize) == remotesize) {ftpclient.setRestartOffset (remoteSize); if (ftpclient.storefile (remote, is)) {return uploadStatus.Upload_from_break_success; }} // Wenn die Unterbrechung des Breakpoint nicht erfolgreich ist, löschen Sie die Datei auf dem Server und laden Sie sie erneut hoch, wenn (! Ftpclient.deleteFile (remoteFileName)) {return uploadStatus.delete_remote_faild; } is = new FileInputStream (f); if (ftpclient.storefile (remote, is)) {result = uploadStatus.Upload_new_file_success; } else {result = uploadStatus.Upload_New_file_failed; } is.close (); } else {InputStream ist = neuer FileInputStream (lokal); if (ftpclient.storefile (remoteFileName, IS)) {result = uploadStatus.Upload_New_file_success; } else {result = uploadStatus.Upload_New_file_failed; } is.close (); } Rückgabeergebnis; } / ** * * tricnect vom Remote -Server * * @throws ioException * / public void disconnect () löscht ioException {if (ftpclient.isconnected ()) {ftpclient.disconnect (); }} public static void main (String [] args) {continftp myftp = new Continftp (); try {myftp.connect ("192.168.1.200", 21, "Duser", "htpDuserxp32"); System.out.println (myftp.upload ("c: //users//administrator//desktop//swing.drawer.jar", "/jars/swing.drawer.jar")); myftp.disconnect (); } catch (ioException e) {System.out.println ("Fehler, die mit FTP herstellen:" + e.getMessage ()); }}} Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.