利用Java 代码创建ftp客户端并实现上传下载等功能
来源:互联网 发布:访问网路和主人网络 编辑:程序博客网 时间:2024/05/16 19:23
由于公司的项目需要,现在需要搭建一个ftp的客户端,所以在查看别人代码后,根据其代码写出ftp客户端,并修改其中的代码,实现上传后的文件名与需要上传的文件名一致,供以后查看文件时方便。先贴出代码;
package com.demo;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.net.SocketException;/** * ftp客户端,实现文件的上传,下载,等功能 * Created by T430 on 2017/5/9. */public class FtpTest { private FTPClient client; public FtpTest(String host,int port ,String username, String password) throws IOException { initFtpClient(host, port, username, password); } public FtpTest(String host, String userName, String password) throws SocketException, IOException { initFtpClient(host, 21, userName, password); } /** * 登录 * @param host * @param port * @param userName * @param password * @throws IOException */ public void initFtpClient(String host, int port, String userName, String password) throws IOException { client =new FTPClient();//s生成一个新的client client.connect(host,port);//链接 client.login(userName,password);//通过用户名和密码登录 } /** * 得到所有目录 * @param remotepath * @return */ public FTPFile[] listFiles(String remotepath) throws IOException { if (client == null){ return null; } client.changeWorkingDirectory(remotepath);//获取所有的目录 return client.listFiles();//返回获取到的目录信息 } /** * 上传 * @param localpath(本地路径) * @param remotepath(ftp的路径) * @return上传是否成功 * @throws FileNotFoundException */ public boolean upload(String localpath,String remotepath) throws IOException { if (null == client){//如果获取到的信息为空则返回false return false; } boolean res= false; FileInputStream fis= new FileInputStream(localpath); int index= remotepath.lastIndexOf("/");//获取路径的最后一个斜杠位置 ///////////////把上传的文件名改为原文件名////////////// int filenameplace= localpath.lastIndexOf(".");//获取上传文件类型中'.'的位置 String filename= localpath.substring(localpath.lastIndexOf("\\")+1,filenameplace);//获取原路径的文件名 String fileType= localpath.substring(filenameplace);//获取源文件的类型 //////////////////////// if (-1 != index){//如果不是最后的位置,则表明成功上传 client.setFileType(FTPClient.BINARY_FILE_TYPE);//设置上传文件的类型 client.changeWorkingDirectory(remotepath.substring(0,index));//获取上传的路径地址 //修改上传的文件名,保持上传后文件名一致 res=client.storeFile(filename+fileType,fis); } fis.close();//关闭流 return res; } /** * 下载 * @param remotepath ftp路径 * @param localpath 本地路径 * @return 下载是否成功 */ public boolean downLoad(String remotepath, String localpath) throws IOException { boolean res= false; if (null == client){//如果获取的为空 则返回FALSE return res; } FileOutputStream fos= new FileOutputStream(localpath);//下载到本地路径 res=client.retrieveFile(remotepath,fos); fos.flush();//清楚缓存 fos.close();//关闭流 return res; } /** * 删除文件 * @param remotepath ftp服务端路径 * @return */ public boolean delete(String remotepath) throws IOException { boolean res= false; if (null == client){ return res; } return client.deleteFile(remotepath) || deleteDirectory(remotepath);//删除文件是否成功 } /** * 创建目录 * @param remotepath ftp服务端路径 * @return */ public boolean makeDirectory(String remotepath) throws IOException { boolean res = false; if (null == client){ return res; } String[] item = remotepath.split("/");//以‘/’分割成字符串数组 String currentPath=""; for (int i = 0; i <item.length-1 ; i++) { currentPath = currentPath +"/"+item[i];//创建目录 client.makeDirectory(currentPath); } return client.makeDirectory(remotepath); } /** * 删除文件 * @param remotepath ftp端路径 * @return */ private boolean deleteDirectory(String remotepath) throws IOException { boolean res= false; FTPFile[] files= listFiles(remotepath);//获取文件数组 for (int i = 0; i <files.length ; i++) { if (files[i].isDirectory()){ //如果是删除目录 deleteDirectory(remotepath+"/"+files[i].getName());//删除目录 }else { client.deleteFile(remotepath+"/"+files[i].getName());//删除文件 } } return client.removeDirectory(remotepath); } /** * 重命名 * @param remoteOldPath ftp旧名字文件 * @param remoteNewPath ftp新名字文件 * @return 是否修改名字成功 */ public boolean replaceName(String remoteOldPath,String remoteNewPath) throws IOException { if (null == client){ return false; } return client.rename(remoteOldPath,remoteNewPath); } /** * 退出登录 * @throws IOException */ public void close() throws IOException { if (null != client) client.logout(); } public static void main (String[] args) throws IOException { FtpTest ft= new FtpTest("虚拟机路径",21,"设定的用户名","设定的密码"); // System.out.print( ft.upload("D:\\7za.exe","/ftp")); FTPFile[] files=ft.listFiles("/ftp"); for (int i = 0; i <files.length ; i++) { System.out.println("内容有:"+files[i].getName()); } System.out.println("删除文件:"+ft.delete("222.png")); }}
在这里非常感谢 @李跃东, 把他的帖子贴出来,供大家学习。
0 0
- 利用Java 代码创建ftp客户端并实现上传下载等功能
- Java实现FTP上传下载功能
- Java实现FTP上传下载功能
- Java实现FTP上传下载功能
- Java实现FTP上传下载功能
- Java实现FTP上传下载功能
- Java实现FTP上传下载功能
- Java实现FTP上传下载功能
- Java实现ftp上传下载功能
- Java中实现FTP上传下载文件的功能,完整代码
- Java中实现FTP上传下载文件的功能,完整代码
- FTP客户端--实现FTP文件的上传下载功能
- java实现的FTP上传下载客户端
- java实现的FTP上传下载客户端
- Java实现FTP的上传下载功能
- Java 实现FTP自动上传下载功能《一》
- python 利用ftplib模块 实现ftp上传下载代码
- java 实现FTP上传下载!
- HTTP状态码
- JSONCPP在VS2013的编译和使用
- android webview和 javascript 进行交互
- Android 联系人订阅号按拼音排序
- CODEVS 2144 砝码称重2
- 利用Java 代码创建ftp客户端并实现上传下载等功能
- HTTP content-type
- js中等性操作符(==)、关系操作符(<,>)和布尔操作符(!)比较规则
- JSP数据交互(二)
- 解释型语言与编译型语言的区别
- 最长单词长度
- 初识Vue
- Eclipse Save Action功能
- Android源码介绍编译