На основании Apache FTP, при загрузке файлов необходимо рассмотреть следующие проблемы (пример - функция продолжения):
(1) Имеет ли FTP -сервер изменение каталога, если он не существует, вам нужно создать каталог.
(2) Определите, существует ли уже загруженный файл. Если он существует, необходимо ли удалить его перед загрузкой или продолжением передачи.
1. Загрузите или загрузите класс перечисления:
пакет com.scengine.wtms.utils.ftp; public enum uploadstatus {file_exits (0), create_directory_success (1), create_directory_fail (2), upload_from_suckcess (3), upload_from_faild (4), download_from_success (5). 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); частный статус Int; public int getStatus () {Статус возврата; } public void setStatus (int status) {this.status = status; } Uploadstatus (int status) {this.status = status; }}2. Код инструмента:
пакет com.scengine.wtms.utils.ftp; Импорт java.io.file; импортировать java.io.fileinputstream; Импорт java.io.fileOutputStream; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.io.outputstream; Импорт java.io.printwriter; Import org.apache.commons.net.printcommandlistener; Импорт org.apache.commons.net.ftp.ftp; Import org.apache.commons.net.ftp.ftpclient; Import org.apache.commons.net.ftp.ftpfile; Импорт org.apache.commons.net.ftp.ftpreply; Public Class Continationftp {private ftpclient ftpclient = new ftpclient (); / *** Настройки построения объекта вывод команды, используемых в процессе, в консоли*/ public contongftp () {this.ftpclient.addprotocolcommandlistener (new PrintCommandListener (New PrintWriter (System.out)); } / ** * * * Используется для подключения к серверу FTP в Java Programming * * * @param hostname * hostname * @param port * port * @param username * username * @param password * password * @retur ftpclient.connect (имя хоста, порт); if (ftpreply.ispositivecoplusion (ftpclient.getReplyCode ())) {if (ftpclient.login (username, password)) {return true; }} dinconcect (); вернуть ложь; } / ** * * * Загрузите файл с FTP -сервера * * @param remote * remote pail Path * * @param local * local file path * * @return, если он успешен * * @Throws IOException * / @SuppressWarnings ("resource") public boolean download (String remote, String Local) ThrowException {ftpclient.EnterCalPass (String remote, String) throwException {ftpclient.EnterpassPass (String remote, String); ftpclient.setFileType (ftp.binary_file_type); логический результат; Файл f = новый файл (локальный); Ftpfile [] files = ftpclient.listfiles (remote); if (files.length! = 1) {System.out.println ("Удаленный файл не уникален"); вернуть ложь; } long lReMotesize = files [0] .getSize (); if (f.exists ()) {outputStream out = new FileOutputStream (f, true); System.out.println («Размер локального файла:» + f.length ()); if (f.length ()> = lReMotesize) {System.out.println («Размер локального файла больше, чем убитый размер файла, загрузка прерванного»); вернуть ложь; } ftpclient.setRestarToffset (f.length ()); result = ftpclient.retrievefile (удаленное, out); out.close (); } else {outputStream out = new FileOutputStream (f); result = ftpclient.retrievefile (удаленное, out); out.close (); } return Result; }/** * * * * * * @Throws ioException */ @suppresswarnings ("resource") public uploadStatus upload (String Local, String remote) бросает ioException {// set passivemode для передачи ftpclient.enterlocalpassivivemode (); // set ftpclient.setFileType (ftp.binary_file_type); Uploadstatus результат; // Обработка удаленных каталогов string remotefilename = remote; if (remote.contains ("/")) {remotefilename = remote.substring (remote.lastindexof ("/") + 1); String Directory = remote.substring (0, remote.lastIndexof ("/") + 1); if (! Directory.equalsIgnoreCase ("/") &&! ftpClient.ChangeWorkingDirectory (Directory)) {// Если удаленный каталог не существует, создайте удаленный каталог сервера рекурсивно int start = 0; int end = 0; if (directory.startswith ("/")) {start = 1; } else {start = 0; } end = directory.indexof ("/", start); while (true) {string sub -recrectory = remote.substring (start, end); if (! ftpclient.changeworkingDirectory (sub -suberectory)) {if (ftpclient.makedirectory (sub -suberectory)) {ftpClient.ChangeWorkingDirectory (sub -receRectory); } else {system.out.println ("create не удалось создать каталог"); return uploadstatus.create_directory_fail; }} start = end + 1; end = directory.indexof ("/", start); // Проверьте, были ли все каталоги созданы, если (end <= start) {break; }}}} // Проверьте, существует ли файл в удаленном ftpfile [] files = ftpclient.listfiles (remotefilename); if (files.length == 1) {long RemoteSize = files [0] .getSize (); Файл f = новый файл (локальный); long localsize = f.length (); if (remoteSize == LocalSize) {return uploadStatus.file_exits; } else if (remoteSize> localize) {return uploadstatus.remote_bigger_local; } // Попробуйте переместить указатель в файле, чтобы реализовать прерывание точки BreakPoint InputStream IS = new FileInputStream (f); if (is.skip (remoteSize) == remoteSize) {ftpClient.SetRestArtOffSet (remoteSize); if (ftpclient.storefile (remote, is)) {return uploadstatus.upload_from_break_success; }} // Если прерывание точки останова не удастся, удалите файл на сервере и загрузите его снова, если (! 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 IS = new FileInputStream (Local); if (ftpclient.storefile (remotefilename, is)) {result = uploadstatus.upload_new_file_success; } else {result = uploadstatus.upload_new_file_failed; } is.close (); } return Result; } / ** * * * Отсоедините от удаленного сервера * * @Throws ioException * / public void disconnect () бросает ioException {if (ftpclient.isconnected ()) {ftpclient.disconnect (); }} public static void main (string [] args) {containftp myftp = new contongftp (); 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 ("Ошибка подключения к ftp:" + e.getmessage ()); }}} Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.