English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Questo articolo introduce come utilizzare lo strumento ftp fornito dalla suite di strumenti Apache commons-net per caricare e scaricare file su un server ftp.
Prima parte
È necessario fare riferimento al pacchetto jar commons-net-3.5.
Utilizzare Maven per l'importazione:
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </dependency>
Download manuale:
https://it.oldtoolbag.com/softs/550085.html
Due: Connetti al Server FTP
/** * Connetti al Server FTP * @throws IOException */ public static final String ANONYMOUS_USER="anonymous"; private FTPClient connect(){ FTPClient client = new FTPClient(); try{ //Connetti al Server FTP client.connect(this.host, this.port); //Accedi if(this.user==null||"".equals(this.user)){ //Accedi come utente anonimo client.login(ANONYMOUS_USER, ANONYMOUS_USER); } else{ client.login(this.user, this.password); } //Imposta formato del file client.setFileType(FTPClient.BINARY_FILE_TYPE); //Ottieni risposta del Server FTP int reply = client.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ client.disconnect(); return null; } //Passa alla directory di lavoro changeWorkingDirectory(client); System.out.println("===Connesso a FTP: " + host + ":" + port); } catch(IOException e){ return null; } return client; } /** * Passa alla directory di lavoro, crea la directory remota se non esiste * @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:ftp服务器ip地址
port:ftp服务器端口
user:登陆用户
password:登陆密码
登陆用户为空时,使用匿名用户登陆。
ftpPath:ftp路径,ftp路径不存在时自动创建,如果是多层目录结构,需要迭代创建目录。
三、上传文件
/** * Carica file * @param targetName Nome del file da caricare su ftp * @param localFile 路径 del file locale * @return */ public Boolean upload(String targetName,String localFile){ //连接ftp server FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("Connessione al server FTP ["+host+":"+port+"] fallita!"); return false; } File file = new File(localFile); //设置上传后文件名 if(targetName==null||"".equals(targetName)) targetName = file.getName(); FileInputStream fis = null; try{ long now = System.currentTimeMillis(); //Inizio del caricamento del file fis = new FileInputStream(file); System.out.println(">>>Inizio del caricamento del file:"+file.getName()); Boolean ok = ftpClient.storeFile(targetName, fis); if(ok){ //Scaricamento riuscito long times = System.currentTimeMillis() - now; System.out.println(String.format(">>>Scaricamento riuscito: dimensione:%s, tempo di upload:%d secondi", formatSize(file.length()), times/1000)); } else//Scaricamento fallito System.out.println(String.format(">>>Scaricamento fallito: dimensione:%s", formatSize(file.length()))); } catch(IOException e){ System.err.println(String.format(">>>Scaricamento fallito: dimensione:%s", formatSize(file.length()))); e.printStackTrace(); return false; } finally{ try{ if(fis!=null) fis.close(); close(ftpClient); } catch(Exception e){ } } return true; }
Quarto: Scarica file
/** * Scarica file * @param localPath Percorso di archiviazione locale * @return */ public int download(String localPath){ // Connessione al server ftp FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("Connessione al server FTP ["+host+":"+port+"] fallita!"); 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 nome = 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"; } }
Cinque, test
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/"); }
Risultato
===Connesso a FTP: 192.168.1.10:21 >>>Inizio dell'upload del file: TeamViewerPortable.rar >>>Upload completato: dimensione: 5 MB, tempo di upload: 3 secondi !!!Disconnetti la connessione FTP: 192.168.1.10:21 ===Connesso a FTP: 192.168.1.10:21 <<<Inizio del download del file: newFile.rar <<<Scaricamento completato: dimensione: 5 MB, tempo di upload: 4 secondi !!!Disconnetti la connessione FTP: 192.168.1.10:21
Sommario
Questo è tutto il contenuto dettagliato dell'articolo su come implementare il trasferimento di file FTP utilizzando lo strumento Apache in Java, spero che sia utile a tutti. Gli amici interessati possono continuare a consultare altre sezioni correlate di questo sito, e sono benvenuti i commenti per segnalare eventuali difetti. Grazie per il supporto degli amici a questo sito!
Dichiarazione: il contenuto di questo articolo è stato preso da Internet, il diritto d'autore appartiene agli autori originali, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, questo sito non possiede il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.