FTP 파일 업로드 및 다운로드 (JAVA)

전문

      1, 사용하여 FTP 방식으로 업로드 및 다운로드 파일 ( 비 SFTP )

      2, 내가 손, 프로 테스트를 공격 코드가 필요로하는 학생들을 이해하고, 간단 명확하고 쉽게, 실제 비즈니스 로직과 함께 추가하십시오

      2, 타사 항아리 패키지 가져 오기 org.apache.commons.net.ftp.FTPClient;

코드

패키지 홈페이지; 

수입 java.io.BufferedOutputStream에; 
수입 java.io.BufferedWriter; 
수입 java.io.File에; 
수입 java.io.FileInputStream의; 
수입 java.io.FileNotFoundException; 
수입 java.io.FileOutputStream의; 
수입 java.io.FileWriter; 
수입 때 java.io.IOException; 
수입 java.io.InputStream를; 
수입 java.io.OutputStream에; 
수입 java.io.Writer에; 
수입은 java.util.List; 

수입 org.apache.commons.io.IOUtils; 
수입 org.apache.commons.net.ftp.FTPClient; 
수입 org.apache.commons.net.ftp.FTPFile; 
수입 org.apache.commons.net.ftp.FTPReply; 

수입 Domain.FileInfoList; 
수입 Domain.FtpConfig;
수입 Util.LoggerUtil;
 
공용 클래스 FTPUtils { 
	공공 정적 문자열 ftp_IP 최종 = "192.168.0.6"; 
	공공 정적 정수 최종 ftp_port = 9001; 
	최종 = "관리자"위치 ftp_user 공공 정적 문자열; 
	= "123"최종 문자열 ftp_psw 공공 정적; 

	공개 무효 메인 정적 (문자열 인수 []) { 
		는 FTP에서 // 다운로드 
		; downloadFromFTP (ftp_IP, ftp_port, 위치 ftp_user, ftp_psw, "/", "새 텍스트 문서 .txt 인", "E") 
		는 FTP 업로드에서 // 
		uploadFromFTP ( ftp_IP, ftp_port, 위치 ftp_user, ftp_psw, "/", "E : // 새 텍스트 문서 .txt 인 작성", "새 텍스트 문서 .txt입니다");
	} 
	/ ** 
	 * @param의 URL의 IP 
	 파라미터 : 포트 포트 
	 파라미터 : 사용자 이름 아이디 
	 * @param 암호 암호 
	 * 경로에 파라미터 : 이것은, remotePath 서버 
	 파라미터 : 파일 이름 파일을 다운로드 할
	 파라미터 : localPath에 로컬 파일에 저장 
	 * / 
	공공 정적 부울 downloadFromFTP (문자열 URL, INT 포트, 사용자 이름 문자열, 문자열 암호는 이것은, remotePath 문자열, 
			문자열 파일 이름, 문자열 localPath에) { 
		false로 부울 = 성공, 
		FTPClient FTPClient 새로운 새로운 FTP = () ; 
		InputStream 인의 INPUT = NULL; 
		의 BufferedOutputStream 라이터 = NULL; 
		= NULL 의해 바이트 [] 
		은 try { 
			INT 회신; 
			ftp.connect (URL 포트); 
			// ftp.connect (URL)는, 
			기본 포트 경우 사용될 수있다 // ftp.connect (URL) 직접 FTP 서버에 연결되어 
			ftp.login (사용자 이름, 암호); // 로그인 
			ftp.enterLocalPassiveMode를 (); 
			ftp.setControlEncoding ( "GBK를");
			= ftp.getReplyCode 답글 (); 
			IF {(FTPReply.isPositiveCompletion (답글)!) 
				ftp.disconnect (); 
				성공 반환; 
			} 
			ftp.changeWorkingDirectory합니다 (이것은, remotePath를); // FTP 서버 디렉토리로 전송 
			FTPFILE [] FS = FTP. 때 listFiles (); // 현재 디렉토리에있는 모든 파일 수 

			(FTPFILE FF : FS)에 대한 { 
				IF {(새 새로운 String (ff.getName () getBytes (), "UTF-8") 등호 (파일 이름)을 ..) 
					/ / 중국어 파일 이름이는 null을 방지 표시, 강제로 ISO-8859-1 코딩 방식으로 설정이 입력 스트림 소요 
					입력 = ftp.retrieveFileStream을 ( "/"+ (새로운 String (ff.getName (). getBytes를 ( "GBK" )))) "는 ISO-8859"; 
					새로운 새 바이트 의해 = [(INT) ff.getSize ()]; 
					// 바이트 배열로 파일 저장 스트림 
					()으로 input.read를, 
					출력 파일로 // , 자동으로 덮어 쓰게됩니다 대상 디렉토리는 로컬 디렉토리는 같은 파일이 있는지 여부를 판단 할 필요가 없다
					작가 = 새의 BufferedOutputStream (새 FileOutputStream에 (localPath에 + "/"+ fileName에));  
					writer.Write ()를 기준으로하는 단계;
					에서 System.out.println ( "로컬 디렉토리"[+ fileName에 + 지정] : "출력 파일"+ localPath에 + "/" + fileName에 + " 성공"); 
				} 
			} 
			// FTP 연결 해제 
			ftp.logout (); 
			true로 성공 = ; 
		} 캐치 (IOException가 E) { 
			e.printStackTrace (); 
		} 최종적으로 { 
			
			IF (ftp.isConnected ()) { 
				은 try { 
					IF (작가 = 널!) { 
						writer.Close (); 
					} 
					IF (! = NULL INPUT) { 
						input.close (); 
					} 
					ftp.disconnect (); 
				} 캐치 (IOException이 IOE는) { 
				} 
			} 
		} 
		; 성공을 반환 
	} 
	
	/ ** 
	 * 하나의 파일을 업로드 FTP 
	 * 
	 파라미터 : FTP 주소 ftpIP
	 파라미터 : 포트의 포트 번호 
	 파라미터 : 사용자 이름 FTP 사용자 이름 
	 * @param 암호 FTP 암호 
	 * @param 디렉토리에 파일 이름을 포함하지 않는 경로 이름을 FTP로 업로드 할 
	 전체 경로 이름을 업로드 할 파라미터 : localFilePath 로컬 파일을 
	 파라미터 : 로 ftp에 destName 파일 이름을 저장 
	 * @throws IOException가  
	 * / 
	공공 부울 uploadFromFTP (ftpIP 문자열, 정수 포트, 사용자 이름 문자열, 문자열 암호, 문자열 디렉토리, localFilePath 문자열, 문자열 destName) {정적 


		fTPClient 새로운 새로운 fTPClient ftpClient = (); 
		FIS = null의 경우 FileInputStream에, 
		부울 = false로 결과; 
		은 try { 
			ftpClient.connect (ftpIP, 포트); 
			ftpClient.login (사용자 이름, 암호) 
			ftpClient.enterLocalPassiveMode을 (); 
			// 설정 업로드 디렉토리
			ftpClient.changeWorkingDirectory (디렉토리) 
			ftpClient.setBufferSize (1024) 
			ftpClient.setConnectTimeout (10 * 1000); 
			ftpClient.setControlEncoding ( "GBK"); 
			ftpClient.setFileType (FTPClient.BINARY_FILE_TYPE); 
			// 중국어 파일 이름의 출현을 방지이 반환된다 null의 경우, 파일 이름이 파일 삭제 ISO-8859-1 코딩 방식으로 설정되어 강제 
			ftpClient.deleteFile (디렉토리 + 새로운 새로운 String (destName.getBytes ( "GBK"), "ISO-8859-1")); 
			파일 SRCFILE 새 파일 = (localFilePath) 새로운; 
			FIS 새로운 새 = FileInputStream에 (SRCFILE) 
			// FTP 서버에 업로드 == 방지 중국어 파일 이름, 파일 이름은 ISO-8859-1 인코딩 업로드 강제하도록 배열된다 널 반환 나타나는 
			결과 = ftpClient.storeFile ((+ 디렉토리 새로운 새로운 String (destName.getBytes ( "GBK")의 "ISO-8859-1")), FIS); 

		} 캐치 (NumberFormatException이 E) { 
			System.err에.에 println ( "FTP 포트 구성 오류 : 숫자가 아닌 :");
		} 캐치 (FileNotFoundException이 전자) { 
			e.printStackTrace (); 
		} 캐치 (IOException이 전자) { 
			e.printStackTrace (); 
		마지막} { 
			IOUtils.closeQuietly (FIS); 
			{시도 
				ftpClient.disconnect를 (); 
			} 캐치 (IOException이 전자) { 
				새로운 RuntimeException을 ( "!关闭FTP连接发生异常", e)를 던져; 
			} 
		} 
		반환 결과; 
	} 
}

  

추천

출처www.cnblogs.com/hzb462606/p/11084820.html