Ftp 下载和上传 指定文件夹内所有文件(包括文件夹,并且文件夹目录不变)...

//下载ftp指定文件夹下所有文件	
public void downLoadAll(String ftpPath, String localPath) {
		FTPClient ftpClient = new FTPClient();
		try {
			ftpPath = separatorHandle(ftpPath);
			localPath = separatorHandle(localPath);
			createPath(localPath);
			ftpClient.setConnectTimeout(90000);
			ftpClient.connect(ftpIp, ftpPort);
			ftpClient.enterLocalPassiveMode();
			if (ftpClient.login(ftpName, ftpPassword)) {
				downFileOrDir(ftpPath, localPath, ftpClient);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (ftpClient.isConnected()) {
					ftpClient.logout();
					ftpClient.disconnect();
				}
			} catch (Exception e) {
			}
		}
	}
	/**
	 * FTP下载目录结构并且包括目录内文件
	 */
	private void downFileOrDir(String ftpPath, String localPath, FTPClient ftpClient) throws Exception {
		File temp = new File(localPath);
		Date date = new Date();
		String now = DateUtils.formatDate(date, "yyyy-MM-dd");
		if (!temp.exists()) {
			temp.mkdirs();
		}
		FTPFile[] allFile = ftpClient.listFiles(ftpPath);
		for (int i = 0; i < allFile.length; i++) {
			File localfile = new File(localPath + File.separator + allFile[i].getName());
			if (!localfile.exists()) {
				localfile.mkdirs();// 创建文件夹
				FTPFile[] ftpfiles = ftpClient.listFiles(ftpPath + allFile[i].getName(),
						new MyFTPFileFilter("csv", ""));
				if (ftpfiles != null && ftpfiles.length > 0) {
					for (FTPFile ftpFile : ftpfiles) {
						downloadingFile(ftpClient,
								localPath + File.separator + allFile[i].getName() + File.separator + ftpFile.getName(),
								ftpPath + allFile[i].getName() + File.separator + ftpFile.getName());
						ftpClient.changeWorkingDirectory(ftpPath + allFile[i].getName());
						ftpClient.dele(ftpFile.getName());
					}
				} else {
					logger.info(ftpPath + ": no match file");
				}
			}
			// 如果文件夹名称和当前日期相同则不删除
			if (!now.equals(allFile[i].getName())) {
				ftpClient.changeWorkingDirectory(ftpPath);
				ftpClient.removeDirectory(allFile[i].getName());
			}
		}
	}
	private void downloadingFile(FTPClient ftpClient, String localFile, String remoteFile) throws Exception {
		File file = new File(localFile);
		if (file.exists()) {
			file.delete();
		}
		FileOutputStream fos = null;
		try {
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			fos = new FileOutputStream(localFile);
			ftpClient.retrieveFile(remoteFile, fos);
			fos.flush();
		} catch (Exception e) {
			throw e;
		} finally {
			if (fos != null) {
				fos.close();
			}
		}
	}

//上传ftp指定文件夹下所有文件
	public void upLoadAll(String localPath, String ftpPath) {
		FTPClient ftpClient = new FTPClient();
		try {
			ftpPath = separatorHandle(ftpPath);
			localPath = separatorHandle(localPath);
			createPath(localPath);
			ftpClient.setConnectTimeout(90000);
			ftpClient.connect(ftpIp, ftpPort);
			ftpClient.enterLocalPassiveMode();
			if (ftpClient.login(ftpName, ftpPassword)) {
				uploadFileOrDir(localPath, ftpPath, ftpClient);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (ftpClient.isConnected()) {
					ftpClient.logout();
					ftpClient.disconnect();
				}
			} catch (Exception e) {
			}
		}
	}

/**
	 * 上传ftp并删除本地文件
	 */
	public void uploadFileOrDir(String localPath, String addatasync, FTPClient ftpClient) throws Exception {
		// 上传文件
		addatasync = separatorHandle(addatasync);
		localPath = separatorHandle(localPath);
		File directory = new File(localPath);
		File[] files = directory.listFiles();
		if (files != null && files.length > 0) {
			for (File file : files) {
				String filename = file.getName();
				ftpClient.changeWorkingDirectory(addatasync);
				ftpClient.makeDirectory(filename);
				File seDirectory = new File(localPath + filename);
				File[] seFiles = seDirectory.listFiles();
				for (File seFile : seFiles) {
					ftpClient.changeWorkingDirectory(addatasync + filename);
					uploadingFile(separatorHandle(addatasync + filename) + seFile.getName(),
							separatorHandle(localPath + filename )+ seFile.getName(),ftpClient);
				}
			}
		}
		// 删除临时所有文件
		deleteDir(directory);
		File temp = new File(localPath);
		if (!temp.exists()) {
			temp.mkdirs();
		}
	}
	private void deleteDir(File dir) {
		if (dir.isDirectory()) {
			String[] children = dir.list();
			// 递归删除目录中的子目录下
			for (int i = 0; i < children.length; i++) {
				deleteDir(new File(dir, children[i]));
			}
		}
		dir.delete();
	}

	private void uploadingFile(String remoteFile, String localfile, FTPClient ftpClient) throws Exception {
		FileInputStream fis = null;
		try {
			// 设置PassiveMode传输
			ftpClient.enterLocalPassiveMode();
			// 设置以二进制流的方式传输
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			ftpClient.deleteFile(remoteFile);
			ftpClient.mdtm(remoteFile);
			ftpClient.setControlEncoding("UTF-8");
			fis = new FileInputStream(localfile);
			ftpClient.storeFile(remoteFile, fis);
		} catch (Exception e) {
			throw e;
		} finally {
			if (fis != null) {
				fis.close();
			}
		}
	}

	public String separatorHandle(String str) {
		if (!str.endsWith("/")) {
			str = str + "/";
		}
		return str;
	}

 

转载于:https://my.oschina.net/jianzheng/blog/1794980

'模板: Option Explicit Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _ (ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _ ByVal SProxyBypass As String, ByVal lFlags As Long) As Long Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _ (ByVal hInternetSession As Long, ByVal sServerName As String, _ ByVal nServerPort As Integer, ByVal sUsername As String, _ ByVal sPassword As String, ByVal lService As Long, _ ByVal lFlags As Long, ByVal lContext As Long) As Long Public Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _ (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _ ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _ ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _ ByVal dwContext As Long) As Boolean Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _ (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _ ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _ ByVal dwContext As Long) As Boolean Public Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _ (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean Public Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _ (ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As Boolean Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _ (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _ lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _ ByVal dwContent As Long) As Long Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _ (ByVal hFind As Long, lpvFndData As WIN32_FIND_DATA) As Long Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Public Type WIN32_FIND_DATA dwFilAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cFileName As String * 260 cAlternate As String * 14 End Type Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _ "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type '窗体: Private Sub Command1_Click() 'FTP下载 lnginet = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, _ vbNullString, vbNullString, 0&) If lnginet Then lnginetconn = InternetConnect(lnginet, "219.131.192.243", 0, _ "posui", "djposui", 1, 0, 0) If lnginetconn Then blnRC = FtpGetFile(lnginetconn, "/load.txt", "c:\load.txt", 0, 0, 1, 0) If blnRC Then MsgBox "download ok!!!" End If InternetCloseHandle lnginetconn InternetCloseHandle lnginet MsgBox "close ok!!!" Else MsgBox "can't connect" End If Else MsgBox "ftp wrong" End If End Sub Private Sub Command2_Click() 'FTP上传 lnginet = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, _ vbNullString, vbNullString, 0&) If lnginet Then lnginetconn = InternetConnect(lnginet, "219.131.192.243", 0, _ "administrator", "vai8888", 1, 0, 0) If lnginetconn Then blnRC = FtpPutFile(lnginetconn, "c:\1.txt", "/1.txt", 0, 0) If blnRC Then MsgBox "download ok!!!" End If InternetCloseHandle lnginetconn InternetCloseHandle lnginet MsgBox "close ok!!!" Else MsgBox "can't connect" End If Else MsgBox "ftp wrong" End If End Sub 方法2: '部件INET Private Sub Command1_Click() Me.Inet1.Execute Me.Inet1.URL, "send c:\11.txt /1.txt" '保存 End Sub Private Sub Command2_Click() Me.Inet1.Execute Me.Inet1.URL, "get /2.txt c:\2.txt" '下载 End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值