java ftp客戶端
2018-07-20 来源:open-open
apache commons-net可以很方便的实现,但是这个第三方包中对文件夹的删除与创建(级联)操作并不是特别的方便。删除文件夹必须保证该文件夹下没有任何 文件,创建文件夹也必须要求父文件夹存在。为了方便以后使用方便,对其进行了简单的封装,主要针对删除与文件夹创建。代码如下:
package cn.androiddevelop.io; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.SocketException; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; /** * ftp客户端 * * @author Yuedong Li * */ public class FtpClient { private FTPClient client; public FtpClient(String host, String userName, String password) throws SocketException, IOException { initFtpClient(host, 21, userName, password); } public FtpClient(String host, int port, String userName, String password) throws SocketException, IOException { initFtpClient(host, port, userName, password); } /** * 登录 * * @param host * @param port * @param userName * @param password * @throws SocketException * @throws IOException */ public void initFtpClient(String host, int port, String userName, String password) throws SocketException, IOException { client = new FTPClient(); client.connect(host, port); client.login(userName, password); } /** * 得到所有目录 * * @param remotePath * @return * @throws IOException */ 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 IOException */ public boolean upload(String localPath, String remotePath) throws IOException { if (client == null) return false; boolean res = false; FileInputStream fileInputStream = new FileInputStream(localPath); int index = remotePath.lastIndexOf('/'); if (index != -1) { client.setFileType(FTP.BINARY_FILE_TYPE); client.changeWorkingDirectory(remotePath.substring(0, index)); res = client.storeFile(remotePath.substring(index + 1), fileInputStream); } fileInputStream.close(); return res; } /** * 下载 * * @param remotePath * ftp路径 * @param localPath * 本地路径 * @return 下载是否成功 * @throws IOException */ public boolean download(String remotePath, String localPath) throws IOException { if (client == null) return false; boolean res = false; FileOutputStream fileOutputStream = new FileOutputStream(localPath); res = client.retrieveFile(remotePath, fileOutputStream); fileOutputStream.flush(); fileOutputStream.close(); return res; } /** * 删除文件 * * @param remotePath ftp端路径 * @return * @throws IOException */ public boolean delete(String remotePath) throws IOException { if (client == null) return false; return client.deleteFile(remotePath) || deleteDirectory(remotePath); } /** * 创建目录 * * @param remotePath * @throws IOException */ public boolean makeDirectory(String remotePath) throws IOException { if (client == null) return false; 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 * @throws IOException */ private boolean deleteDirectory(String remotePath) throws IOException { 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 * @param remoteNewPath * @return * @throws IOException */ public boolean rename(String remoteOldPath, String remoteNewPath) throws IOException { if (client == null) return false; return client.rename(remoteOldPath, remoteNewPath); } /** * 退出登录 * * @throws IOException */ public void close() throws IOException { if (client != null) client.logout(); } }
标签: 代码
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:iOS秒表功能实现
下一篇:PHPExcel 多工作表 导入
最新资讯
热门推荐