java 使用 common-net.jar來操作ftp伺服器上傳下載,刪除,移動,重新命名等操作

hgs19921112發表於2018-09-11
package hgs.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FTPTest {
	static String hostname="192.168.249.134";
	static int port = 21;
	static String username = "hgs";
	static String password = "hgs";
	public static void main(String[] args) {
		
		FTPClient client = getFTPClient();
		if(client==null)
			return;
		//mkFTPServerCompleteDir(client,"/home/hgs");
		//downloadFiles(client, "/home/hgs", "c:/download");
		//uploadFile(client, "c:/download/ipconf.cfg", "/home/hgs");
		rmrFile( client , "/home/hgs/upload", "STOU.1");
		closeFTPClient(client);
	}
	//得到ftp客戶端
	public static  FTPClient getFTPClient() {
		FTPClient ftpClient = new FTPClient();
		ftpClient.setControlEncoding("utf-8");
		boolean flg = false;
		try {
			ftpClient.connect(hostname, port);
			flg = ftpClient.login(username, password);
		} catch (IOException e) {
			e.printStackTrace();
		}
		if(flg) {
			return ftpClient;
		}else {
			return null;
		}
		
	}
	//關閉連結
	public static void closeFTPClient(FTPClient client) {
		try {
			client.disconnect();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
	//遍歷檔案
	public static FTPFile[]  getFileList(FTPClient client,String dir) {
		FTPFile[] files=null;
		try {
			files = client.listFiles(dir);
		} catch (IOException e) {
			e.printStackTrace();
		}
/*		for(FTPFile file : files) {
			System.out.println(file.getName());
		}*/
		return files;
	}
	//下載檔案
	public static void downloadFiles(FTPClient client,String sourcedir,String destdir) {
		boolean flg = false;
		try {
			flg = client.changeWorkingDirectory(sourcedir);
		} catch (IOException e) {
			e.printStackTrace();
		}
		if(flg) {
			try {
				//得到所有檔案遍歷
				FTPFile[] files = client.listFiles();
				for(FTPFile file: files) {
					String filename = file.getName();
					if(!downloadExists(destdir,filename)&&!"done".equals(filename)) {
						FileOutputStream fos = new FileOutputStream(destdir+"/"+filename);
						client.retrieveFile(filename, fos);					
						fos.close();
						//下載完成後移動檔案到完成目錄,這裡可以當做重新命名或者移動檔案
						client.rename(sourcedir+"/"+filename, sourcedir+"/done/"+filename);
					}
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
			
	}
	//判斷本地檔名是否與要下載的檔名重複
	public static boolean downloadExists(String destdir,String filename) {
		File file = new File(destdir+"/"+filename);
		return file.exists();
	}
	//建立下載完成目錄,下載完成後的檔案都移動到該目錄下
	public static void mkFTPServerCompleteDir(FTPClient client,String sourcedir) {
		String doneDir = sourcedir+"/"+"done";
		boolean flg = false;
		try {
			FTPFile[] files = client.listDirectories(sourcedir);
			for(FTPFile f :files) {
				if(f.getName().equals("done"))
					flg=true;
			}
			if(!flg)
				client.makeDirectory(doneDir);
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	
	
	public static void uploadFile(FTPClient client ,String sourcefile ,String destdir) {
		String destination = destdir+"/upload";
		mkFTPServerUploadCompleteDir(client,destdir);
		try {
			FileInputStream fis = new FileInputStream(sourcefile);
			boolean flog = client.changeWorkingDirectory(destination);	
			if(flog) {
				client.setFileType(FTPClient.BINARY_FILE_TYPE);
				client.storeUniqueFile(fis);
				fis.close();
			}
		} catch (Exception e  ) {
			e.printStackTrace();
		}
	}
	//建立下載完成目錄,下載完成後的檔案都移動到該目錄下
public static void mkFTPServerUploadCompleteDir(FTPClient client,String uploaddir) {
		String doneDir = uploaddir+"/"+"upload";
		boolean flg = false;
		try {
			FTPFile[] files = client.listDirectories(uploaddir);
			for(FTPFile f :files) {
				if(f.getName().equals("upload"))
					flg=true;
			}
			if(!flg)
				client.makeDirectory(doneDir);
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
//刪除檔案
public static void rmrFile(FTPClient client ,String path,String filename) {
		
		try {
			client.changeWorkingDirectory(path);
			client.dele(path+"/"+filename);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

轉自:https://www.cnblogs.com/weihbs/p/7760552.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2213965/,如需轉載,請註明出處,否則將追究法律責任。

相關文章