English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Dettagli del codice di trasmissione dei file FTP utilizzando lo strumento Apache in Java

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.

Ti potrebbe interessare