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