java的FTP客户端上传、下载、删除等

最近经常用到FTP操作一些文件,越发觉得FTP协议是多么的好用。

因为最近一直写的是FTP客户端的操作,所以本文只讲一些客户端的常用操作,以后如果用到server的话,再补充server版的。

不废话了,直接贴代码,代码都是很好理解的,注释也很详细。

FTP apache jar包:http://commons.apache.org/proper/commons-net/download_net.cgi

public class FTPClientUtil {
	public FTPClient ftpClient;
	private String ip;
	private int port;
	private String username;
	private String password;

	public FTPClientUtil(String ip, int port, String username, String password) {
		this.ip = ip;
		this.port = port;
		this.username = username;
		this.password = password;
		ftpClient = new FTPClient();
		ftpClient.setBufferSize(1024);
		ftpClient.setControlEncoding("UTF-8");
	}

	private boolean connect() throws SocketException, IOException {
		boolean isConnect = false;
		ftpClient.connect(ip, port);
		isConnect = ftpClient.login(username, password);
		ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
		return isConnect;
	}

	/**
	 * 上传文件或文件夹,可直接使用此方法上传无需连接登陆
	 * 
	 * @param remoteFilename
	 * @param localFile
	 * @throws IOException
	 * @throws SocketException
	 * @return
	 */
	public boolean uploadFile(String remoteFilename, File localFile) throws SocketException, IOException {
		if (!ftpClient.isConnected()) {
			connect();
		}
		boolean isUpload = false;
		if (localFile.isDirectory()) {
			ftpClient.makeDirectory(localFile.getName());
			ftpClient.changeWorkingDirectory(localFile.getName());
			File[] files = localFile.listFiles();
			for (File f : files) {
				uploadFile(f.getName(), f);
			}
		} else if (localFile.isFile()) {
			InputStream is = new FileInputStream(localFile);
			isUpload = ftpClient.storeFile(remoteFilename, is);
			is.close();
		}
		return isUpload;
	}

	/**
	 * 删除文件,可直接使用此方法删除无需连接登陆
	 * 
	 * @param pathname
	 * @return
	 * @throws IOException
	 * @throws SocketException
	 */
	public boolean delFile(String pathname) throws SocketException, IOException {
		if (!ftpClient.isConnected()) {
			connect();
		}
		boolean isDel = false;
		isDel = ftpClient.deleteFile(pathname);
		return isDel;
	}

	/**
	 * 跳转目录,可直接使用此方法无需连接登陆 如跳转的文件夹不存在,则创建
	 * 
	 * @param pathname
	 * @return
	 * @throws IOException
	 */
	public boolean changeWorkingDirectory(String pathname) throws SocketException, IOException {
		if (!ftpClient.isConnected()) {
			connect();
		}
		boolean result = false;
		result = ftpClient.changeWorkingDirectory(pathname);
		// 跳转失败则创建文件夹
		if (!result) {
			ftpClient.makeDirectory(pathname);
			result = ftpClient.changeWorkingDirectory(pathname);
		}
		return result;
	}
}

下面是使用的一个例子

 只是将FTP客户端的操作简单封装了一下,构造函数填入参数,然后直接使用方法上传、下载操作了。

将连接、登录封装到里面,也是因为FTP连接是有超时的,每次用同一个对象上传时也就不用在判断连接是否断开了,有连接就用原来的连接,没有则重新创建,简化了操作

File file=new File("路径");
FTPClientUtil ftp=new FTPClientUtil("127.0.0.1",21,"test","test");
ftp.uploadFile(file.getname,file);
ftp.logout();
ftp.disconnect();


你可能感兴趣的:(java,ftp,apache,java)