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

Detalhamento do código de transmissão de arquivos ftp usando a ferramenta Apache no Java

Este artigo introduz como usar a suite de ferramentas Apache Commons-A ferramenta ftp fornecida pelo net realiza o upload e o download de arquivos para o servidor ftp.

1. Preparação

Precisa referenciar commons-net-3.5.jar

Importar usando Maven:

<dependency>
  <groupId>commons-net</groupId>
  <artifactId>commons-net</artifactId>
  <version>3.5</version>
</dependency>

Baixar manualmente:

https://pt.oldtoolbag.com/softs/550085.html

2. Conectar ao Servidor FTP

/**
   * Conectar ao Servidor FTP
   * @throws IOException
   */
public static final String ANONYMOUS_USER="anonymous";
private FTPClient connect(){
	FTPClient client = new FTPClient();
	try{
		//Conectar ao Servidor FTP
		client.connect(this.host, this.port);
		//Login
		if(this.user==null||"".equals(this.user)){
			//Usar login anônimo
			client.login(ANONYMOUS_USER, ANONYMOUS_USER);
		} else{
			client.login(this.user, this.password);
		}
		//Definir Formato do Arquivo
		client.setFileType(FTPClient.BINARY_FILE_TYPE);
		//Obter Resposta do Servidor FTP
		int reply = client.getReplyCode();
		if(!FTPReply.isPositiveCompletion(reply)){
			client.disconnect();
			return null;
		}
		//Mudar diretório de trabalho
		changeWorkingDirectory(client);
		System.out.println("===Conectando ao FTP:")+host+:"+port);
	}
	catch(IOException e){
		return null;
	}
	return client;
}
/**
   * Mudar diretório de trabalho, criar diretório se o diretório remoto não existir
   * @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 não existe, crie manualmente o diretório
			StringTokenizer token = new StringTokenizer(this.ftpPath,"\\",//");
			while(token.hasMoreTokens()){
				String path = token.nextToken();
				client.makeDirectory(path);
				client.changeWorkingDirectory(path);
			}
		}
	}
}
/**
   * Desconectar conexão FTP
   * @param ftpClient
   * @throws IOException
   */
public void close(FTPClient ftpClient) throws IOException{
	if(ftpClient!=null && ftpClient.isConnected()){
		ftpClient.logout();
		ftpClient.disconnect();
	}
	System.out.println("!!!Desconectando do FTP:")+host+:"+port);
}

host: endereço IP do servidor ftp
port: porta do servidor ftp
user: usuário de login
password: senha de login
Quando o usuário de login estiver vazio, use o usuário anônimo para login.
ftpPath: caminho do ftp, se o caminho do ftp não existir, será criado automaticamente. Se houver uma estrutura de diretórios de várias camadas, será necessário criar diretórios iterativamente.

Três, upload de arquivo

/**
   * Upload de arquivo
   * @param targetName Nome do arquivo a ser uploaded para o ftp
   * @param localFile Caminho do arquivo local
   * @return
   */
public Boolean upload(String targetName,String localFile){
	//Conectar ao servidor ftp
	FTPClient ftpClient = connect();
	if(ftpClient==null){
		System.out.println("Conectando ao servidor FTP["+host+:"+port+"]Falha!");
		return false;
	}
	File file = new File(localFile);
	//Definir o nome do arquivo a ser uploaded
	if(targetName==null||"".equals(targetName))
	      targetName = file.getName();
	FileInputStream fis = null;
	try{
		
		//Início do upload de arquivo
		fis = new FileInputStream(file);
		System.out.println(">>>Início do upload de arquivo:",+file.getName());
		Boolean ok = ftpClient.storeFile(targetName, fis);
		if(ok){
			//Upload bem-sucedido
			long times = System.currentTimeMillis(); - now;
			System.out.println(String.format(">>>Upload bem-sucedido: tamanho:%s, tempo de upload:%d segundos", formatSize(file.length()), times/1000));
		} else//Falha no upload
		System.out.println(String.format(">>>Falha no upload: tamanho:%s", formatSize(file.length())));
	}
	catch(IOException e){
		System.err.println(String.format(">>>Falha no upload: tamanho:%s", formatSize(file.length())));
		e.printStackTrace();
		return false;
	}
	finally{
		try{
			if(fis!=null)
			          fis.close();
			close(ftpClient);
		}
		catch(Exception e){
		}
	}
	return true;
}

Quarto, download de arquivo

/**
   * Download de arquivo
   * @param localPath Caminho de armazenamento local
   * @return
   */
public int download(String localPath){
	// Conectar ao servidor ftp
	FTPClient ftpClient = connect();
	if(ftpClient==null){
		System.out.println("Conectando ao servidor FTP["+host+:"+port+"]Falha!");
		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("<<<Início do download do arquivo:")+name);
			
			Boolean ok = ftpClient.retrieveFile(new String(name.getBytes("UTF"),-8"),"ISO-8859-1"), fos);
			if(ok){
				//Download bem-sucedido
				long times = System.currentTimeMillis(); - now;
				System.out.println(String.format("<<<Download bem-sucedido: tamanho:%s, tempo de upload:%d segundos", formatSize(ftpFiles[i].getSize()), times/1000));
				c++;
			} else{
				System.out.println("<<<Falha no download");
			}
		}
		catch(IOException e){
			System.err.println("<<<Falha no download");
			e.printStackTrace();
		}
		finally{
			try{
				if(fos!=null)
				            fos.close();
				close(ftpClient);
			}
			catch(Exception e){
			}
		}
	}
	return c;
}

formatar o tamanho do arquivo

private static final DecimalFormat DF = new DecimalFormat("#.##");
  /**
   * formatar o tamanho do arquivo (B, KB, MB, GB)
   * @param size
   * @return
   */
  private String formatSize(long size){
    " B";1024{
      " KB"; + return size
    }1024*1024{
      " KB";/1024 + else if(size<
    }1024*1024*1024{
      return (size/(1024*1024)) + " MB";
    }else{
      double gb = size/(1024*1024*1024);
      return DF.format(gb)+" GB";
    }
  }

Cinco, teste

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/");
  }

Resultados

===Conectando ao FTP:192.168.1.10:21
>>>Começando a upload do arquivo: TeamViewerPortable.rar
>>>Sucesso no upload: tamanho:5 MB, tempo de upload:3segundo
!!!Desconecte a conexão FTP:192.168.1.10:21
===Conectando ao FTP:192.168.1.10:21
<<<Começando a baixar o arquivo: newFile.rar
<<<Sucesso no download: tamanho:5 MB, tempo de upload:4segundo
!!!Desconecte a conexão FTP:192.168.1.10:21

Resumo

Isso é tudo sobre a implementação do código de transmissão de arquivos FTP usando a ferramenta Apache no Java, esperamos que ajude a todos. Amigos interessados podem continuar a ler outros tópicos relacionados no site, e são bem-vindos a deixar comentários sobre o que pode ser melhorado. Agradecemos o apoio dos amigos ao site!

Declaração: O conteúdo deste artigo é extraído da Internet, pertence ao autor original, é contribuído e carregado voluntariamente pelos usuários da Internet, o site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, seja bem-vindo a enviar e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Em caso de verificação, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar