English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Эта статьяmainly介绍了如何使用Apache-инструментовый наборcommons-net提供的ftp-инструмент для загрузки и загрузки файлов на ftp-сервер.
1. Подготовка
Необходимо ссылаться на пакет commons-net-3.5.jar.
Использование Maven для импорта:
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </dependency>
Ручная загрузка:
https://ru.oldtoolbag.com/softs/550085.html
Двое. Подключение к FTP Server
/** * Подключение к FTP Server * @throws IOException */ public static final String ANONYMOUS_USER="anonymous"; private FTPClient connect(){ FTPClient client = new FTPClient(); try { //Подключение к FTP Server client.connect(this.host, this.port); //Аутентификация if(this.user==null||"".equals(this.user)){ //Использование аутентификации без пароля client.login(ANONYMOUS_USER, ANONYMOUS_USER); } else { client.login(this.user, this.password); } //Настройка формата файла client.setFileType(FTPClient.BINARY_FILE_TYPE); //Получение ответа FTP Server int reply = client.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ client.disconnect(); return null; } //Перемещение в рабочую директорию changeWorkingDirectory(client); System.out.println("===Подключение к FTP: " + host + ":" + port); } catch(IOException e) { return null; } return client; } /** * Перемещение в рабочую директорию, создание директории, если удаленная директория не существует * @param client * @throws IOException */ private void changeWorkingDirectory(FTPClient client) throws IOException{ if(this.ftpPath!=null&&!"".equals(this.ftpPath)){ Boolean ok = client.changeWorkingDirectory(this.ftpPath); if(!ok){ // ftpPath не существует, создается вручную StringTokenizer token = new StringTokenizer(this.ftpPath,"\\//"); while(token.hasMoreTokens()){ String path = token.nextToken(); client.makeDirectory(path); client.changeWorkingDirectory(path); } } } } /** * Разорвать FTP-соединение * @param ftpClient * @throws IOException */ public void close(FTPClient ftpClient) throws IOException{ if(ftpClient!=null && ftpClient.isConnected()){ ftpClient.logout(); ftpClient.disconnect(); } System.out.println("!!! Разорвать FTP-соединение: " + host + ":" + port); }
host: IP-адрес сервера ftp
port: Порт сервера ftp
user: Пользователь для входа
password: Пароль для входа
Если пользователь не указан, используется анонимный пользователь для входа.
ftpPath: Путь ftp, если путь ftp не существует, он автоматически создается. Если структура многоуровневых каталогов, необходимо итеративно создавать каталоги.
Третий раздел: Загрузка файла
/** * Загрузка файла * @param targetName Название файла для загрузки на ftp * @param localFile Путь к локальному файлу * @return */ public Boolean upload(String targetName,String localFile){ //连接ftp server FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("连接FTP服务器["+host+":"+port+"]失败!"); return false; } File file = new File(localFile); //设置上传后文件名 if(targetName==null||"".equals(targetName)) targetName = file.getName(); FileInputStream fis = null; try { long now = System.currentTimeMillis(); //Начало загрузки файла fis = new FileInputStream(file); System.out.println(">>>Начало загрузки файла:"+file.getName()); Boolean ok = ftpClient.storeFile(targetName, fis); if (ok) { //Успешная загрузка long times = System.currentTimeMillis() - now; System.out.println(String.format(">>>Успешная загрузка: размер:%s, время загрузки:%d секунд", formatSize(file.length()), times/1000)); } else//Ошибка загрузки System.out.println(String.format(">>>Ошибка загрузки: размер:%s", formatSize(file.length()))); } catch(IOException e) { System.err.println(String.format(">>>Ошибка загрузки: размер:%s", formatSize(file.length()))); e.printStackTrace(); return false; } finally { try { if(fis!=null) fis.close(); close(ftpClient); } catch(Exception e) { } } return true; }
Четыре, загрузка файлов
/** * Загрузка файлов * @param localPath местоположение на диске * @return */ public int download(String localPath){ // 连接ftp server FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("连接FTP服务器["+host+":"+port+"]失败!"); return 0; } File dir = new File(localPath); if(!dir.exists()) dir.mkdirs(); FTPFile[] ftpFiles = null; try { ftpFiles = ftpClient.listFiles(); if(ftpFiles==null||ftpFiles.length==0) return 0; } catch(IOException e) { return 0; } int c = 0; for (int i=0;i<ftpFiles.length;i++){ FileOutputStream fos = null; try { String name = ftpFiles[i].getName(); fos = new FileOutputStream(new File(dir.getAbsolutePath() + File.separator + name)); System.out.println("<<<Начало загрузки файла: " + name); long now = System.currentTimeMillis(); Boolean ok = ftpClient.retrieveFile(new String(name.getBytes("UTF-8"),"ISO-8859-1"), fos); if (ok) { //Успешная загрузка long times = System.currentTimeMillis() - now; System.out.println(String.format("<<<Успешная загрузка: размер:%s, время загрузки:%d секунд", formatSize(ftpFiles[i].getSize()), times/1000)); c++; } else { System.out.println("<<<Неудачная загрузка"); } } catch(IOException e) { System.err.println("<<<Неудачная загрузка"); e.printStackTrace(); } finally { try { if (fos != null) fos.close(); close(ftpClient); } catch(Exception e) { } } } return c; }
Форматирование размера файла
private static final DecimalFormat DF = new DecimalFormat("#.##"); /** * Форматирование размера файла (B, KB, MB, GB) * @param size * @return */ private String formatSize(long size) { if (size < 1024) { return size + " B"; } else if (size < 1024*1024) { return size/1024 + " KB"; } else if (size < 1024*1024*1024) { return (size/(1024*1024)) + " MB"; }else{}} double gb = size/(1024*1024*1024); return DF.format(gb)+" GB"; } }
五、测试
public static void main(String args[]){ FTPTest ftp = new FTPTest("192.168.1.10",21,null,null,"/temp/2016/12"); ftp.upload("newFile.rar", "D:/ftp/TeamViewerPortable.rar"); System.out.println(""); ftp.download("D:/ftp/"); }
结果
===连接到FTP:192.168.1.10:21 >>>开始上传文件:TeamViewerPortable.rar >>>上传成功:大小:5 MB,上传时间:3秒 !!!断开FTP连接:192.168.1.10:21 ===连接到FTP:192.168.1.10:21 <<<开始下载文件:newFile.rar <<<下载成功:大小:5 MB,上传时间:4秒 !!!断开FTP连接:192.168.1.10:21
总结
以上就是本文关于java使用Apache工具集实现ftp文件传输代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#oldtoolbag.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。