JAVA FTP 업로드 다운로드 실현 (sun. net. ftp. FtpClient)
package com.why.ftp;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
/**
* ftp ,
* @author why 2009-07-30
*
*/
public class FtpUtil {
private String ip = "";
private String username = "";
private String password = "";
private int port = -1;
private String path = "";
FtpClient ftpClient = null;
OutputStream os = null;
FileInputStream is = null;
public FtpUtil(String serverIP, String username, String password) {
this.ip = serverIP;
this.username = username;
this.password = password;
}
public FtpUtil(String serverIP, int port, String username, String password) {
this.ip = serverIP;
this.username = username;
this.password = password;
this.port = port;
}
/**
* ftp
*
* @throws IOException
*/
public boolean connectServer(){
ftpClient = new FtpClient();
try {
if(this.port != -1){
ftpClient.openServer(this.ip,this.port);
}else{
ftpClient.openServer(this.ip);
}
ftpClient.login(this.username, this.password);
if (this.path.length() != 0){
ftpClient.cd(this.path);// path ftp
}
ftpClient.binary();// 2 、
System.out.println(" \"" + ftpClient.pwd() + "\" ");
return true;
}catch (IOException e){
e.printStackTrace();
return false;
}
}
/**
* ftp
*
* @throws IOException
*/
public boolean closeServer(){
try{
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (ftpClient != null) {
ftpClient.closeServer();
}
System.out.println(" ");
return true;
}catch(IOException e){
e.printStackTrace();
return false;
}
}
/**
*
* @param dir
* @return
*/
private boolean isDirExist(String dir){
String pwd = "";
try {
pwd = ftpClient.pwd();
ftpClient.cd(dir);
ftpClient.cd(pwd);
}catch(Exception e){
return false;
}
return true;
}
/**
*
* @param dir
* @return
* @throws Exception
*/
private boolean createDir(String dir){
try{
ftpClient.ascii();
StringTokenizer s = new StringTokenizer(dir, "/"); //sign
s.countTokens();
String pathName = ftpClient.pwd();
while(s.hasMoreElements()){
pathName = pathName + "/" + (String) s.nextElement();
try {
ftpClient.sendServer("MKD " + pathName + "\r
");
} catch (Exception e) {
e = null;
return false;
}
ftpClient.readServerResponse();
}
ftpClient.binary();
return true;
}catch (IOException e1){
e1.printStackTrace();
return false;
}
}
/**
* ftp
* filename ,
*
* @param filename ( )
* @return
* @throws Exception
*/
public boolean upload(String filename){
String newname = "";
if(filename.indexOf("/") > -1){
newname = filename.substring(filename.lastIndexOf("/") + 1);
}else{
newname = filename;
}
return upload(filename, newname);
}
/**
* ftp
* newName ,
*
* @param fileName ( )
* @param newName ( )
* @return
*/
public boolean upload(String fileName, String newName){
try{
String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");
File file_in = new File(savefilename);//
if(!file_in.exists()){
throw new Exception(" [" + file_in.getName() + "] !");
}
if(file_in.isDirectory()){
upload(file_in.getPath(),newName,ftpClient.pwd());
}else{
uploadFile(file_in.getPath(),newName);
}
if(is != null){
is.close();
}
if(os != null){
os.close();
}
return true;
}catch(Exception e){
e.printStackTrace();
System.err.println("Exception e in Ftp upload(): " + e.toString());
return false;
}finally{
try{
if(is != null){
is.close();
}
if(os != null){
os.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
/**
*
* @param fileName
* @param newName
* @param path
* @throws Exception
*/
private void upload(String fileName, String newName,String path) throws Exception{
String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");
File file_in = new File(savefilename);//
if(!file_in.exists()){
throw new Exception(" [" + file_in.getName() + "] !");
}
if(file_in.isDirectory()){
if(!isDirExist(newName)){
createDir(newName);
}
ftpClient.cd(newName);
File sourceFile[] = file_in.listFiles();
for(int i = 0; i < sourceFile.length; i++){
if(!sourceFile[i].exists()){
continue;
}
if(sourceFile[i].isDirectory()){
this.upload(sourceFile[i].getPath(),sourceFile[i].getName(),path+"/"+newName);
}else{
this.uploadFile(sourceFile[i].getPath(),sourceFile[i].getName());
}
}
}else{
uploadFile(file_in.getPath(),newName);
}
ftpClient.cd(path);
}
/**
* upload
*
* @param filename
* @param newname
* @return -1 >=0 ,
* @throws Exception
*/
public long uploadFile(String filename, String newname) throws Exception{
long result = 0;
TelnetOutputStream os = null;
FileInputStream is = null;
try {
java.io.File file_in = new java.io.File(filename);
if(!file_in.exists())
return -1;
os = ftpClient.put(newname);
result = file_in.length();
is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while((c = is.read(bytes)) != -1){
os.write(bytes, 0, c);
}
}finally{
if(is != null){
is.close();
}
if(os != null){
os.close();
}
}
return result;
}
/**
* ftp
*
* @param filename
* @param newfilename
* @return
* @throws Exception
*/
public long downloadFile(String filename, String newfilename){
long result = 0;
TelnetInputStream is = null;
FileOutputStream os = null;
try{
is = ftpClient.get(filename);
java.io.File outfile = new java.io.File(newfilename);
os = new FileOutputStream(outfile);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
result = result + c;
}
}catch (IOException e){
e.printStackTrace();
}finally{
try {
if(is != null){
is.close();
}
if(os != null){
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
*
*
* @param path
* @return
*/
public List getFileList(String path){
List list = new ArrayList();
DataInputStream dis;
try {
dis = new DataInputStream(ftpClient.nameList(this.path + path));
String filename = "";
while((filename = dis.readLine()) != null){
list.add(filename);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
public static void main(String[] args){
FtpUtil ftp = new FtpUtil("133.224.202.2","tstbill","tstbill");
ftp.connectServer();
boolean result = ftp.upload("C:/test_why", "test_why/test");
System.out.println(result?" !":" !");
List list = ftp.getFileList("test_why/test");
for(int i=0;i<list.size();i++){
String name = list.get(i).toString();
System.out.println(name);
}
ftp.closeServer();
/**
FTP
USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT
PASS PASV STOR REST CWD STAT RMD XCUP OPTS
ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH
REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ
QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT
, sendServer ( FTP ) , FTP \r
ftpclient.sendServer("XMKD /test/bb\r
"); // FTP
ftpclient.readServerResponse sendServer
nameList("/test")
XMKD ,
XRMD
DELE
*/
}
}
FtpClient :
sun.net.ftp.FtpClient., FTP 。 , FTP , , , 。FtpClient FTP ,FtpClient " " 。 :
public static boolean useFtpProxy
FTP , , , TRUE, 。
public static String ftpProxyHost
useFtpProxy TRUE , 。
public static int ftpProxyPort
useFtpProxy TRUE , 。
FtpClient , :
1、public FtpClient(String hostname,int port)
FTP 。
2、public FtpClient(String hostname)
FTP , 。
3、FtpClient()
FtpClient , FTP 。 ,FTP openServer 。
FtpClient, FTP 。 ftpClient FTP 。
public void openServer(String hostname)
FTP , 。
public void openServer(String host,int port)
、 FTP 。
, FTP 。 。
public void login(String username,String password)
username password FTP 。 Intemet , FTP anonymous, 。
FtpClient 。
public void cd(String remoteDirectory): remoteDirectory 。
public void cdUp(): 。
public String pwd(): 。
public void binary(): 。
public void ascii(): ASCII 。
public void rename(String string,String string1): 。
, FtpClient 。 、 。 。
public TelnetInputStream list()
。
public TelnetInputStream get(String filename)
filename, TelnetInputStream 。
public TelnetOutputStream put(String filename)
, filename
sun. net. ftp. FtpClient 를 사용 하여 업로드 기능 개발 을 진행 하 며 jdk 1.7 에 서 는 문제 해결 이 적용 되 지 않 습 니 다.
자바 업로드
2013 - 07 - 14 19: 05 댓 글 읽 기
이 글 은 이미 다음 과 같이 수록 되 었 다.
저작권 성명: 본 고 는 블 로 거들 이 창작 한 글 로 블 로 거들 의 허락 없 이 전재 할 수 없다.
이전 프로젝트 에 서 는 sun. net. ftp. FtpClient 같은 파일 을 업로드 하 는 기능 을 개 발 했 습 니 다.
서버 에 연결 하 는 코드 는 다음 과 같 습 니 다.
public static FtpClient ftpClient = null;
ftpClient = new FtpClient(); ftpClient.openServer(server); ftpClient.login(user, password);
이전에 이 기능 은 jdk 1.6 을 바탕 으로 개발 되 었 다.모든 것 을 정상적으로 사용 하 다.
그러나 고객 의 환경 에 jdk 1.7 환경 이 있 기 때문에 직접 배치 한 결과 파일 업로드 에 실 패 했 고 다음 과 같은 오 류 를 보고 합 니 다.
cannont instantiate the type FtpClient
조사 결과
1) sun. net. ftp. FtpClient 와 같은 종 류 는 jdk 의 도움말 문서 에 구체 적 인 설명 이 없 으 며 외부 에 공개 되 지 않 았 다.그리고 이 종 류 는 jdk 의 rt. jar 에서 이 루어 졌 다.
2) jdk 1.7 에서 구조 함수 FtpClient () 가 private 형식 으로 정의 되 어 new 가 불가능 합 니 다.jdk 1.7 에서 FtpClient. create (ip) 방법 으로 바 뀌 었 습 니 다.
그리고 다른 방법 도 거의 고 쳤 다.
예 를 들 어 ftpClient. openServer (server); ftpClient.login(user, password);
ftpClient. login (user, null, password);
ftpClient.binary(); ---> ftpClient.setBinaryType();
ftpClient.put(remotefilename);--->ftpClient.putFileStream(remotefilename, true);
기다리다
만약 그렇다면 이 문 제 를 해결 하 는 데 는 두 가지 방법 이 있다.
1. 이 업로드 기능 을 다시 쓰 지만 1.6 버 전 은 어떻게 할 까요? jdk 버 전에 따라 분리 처리 해 야 할 수도 있 습 니 다.
2. 기 존 서버 에 1.6 환경 을 구축 한 다음 tomcat 가 시 작 될 때 1.6 jdk 를 불 러 옵 니 다.
이것 은 Liux 나 windows 에서 매우 편리 하 다.윈도 우즈 에서 tomcat 가 서비스 형식 으로 시작 되면 관련 자바 가상 기기 원본 을 직접 수정 하면 됩 니 다.
1.package com.boonya.upload.util.simple;
2.
3.import java.io.File;
4.import java.io.FileInputStream;
5.import java.io.FileOutputStream;
6.import java.io.IOException;
7.import java.net.InetSocketAddress;
8.import sun.net.TelnetInputStream;
9.import sun.net.TelnetOutputStream;
10.import sun.net.ftp.FtpClient;
11.import sun.net.ftp.FtpProtocolException;
12./**
13. * Java API FTP
14. * @Jdk:version 1.7
15. * @Title:Ftp.java
16. * @author: boonya
17. * @notice: ,
18. */
19.public class FtpJdk
20.{
21. /**
22. *
23. *
24. */
25. private String localfilename;
26. /**
27. *
28. *
29. */
30. private String remotefilename;
31. /**
32. *
33. * FTP
34. */
35. private FtpClient ftpClient;
36.
37. /**
38. *
39. *
40. * @param ip
41. * IP
42. * @param port
43. *
44. * @param user
45. *
46. * @param password
47. *
48. * @param path
49. *
50. * @throws FtpProtocolException
51. *
52. */
53. public void connectServer(String ip, int port, String user, String password, String path) throws FtpProtocolException
54. {
55. try
56. {
57. /* ****** ****** */
58. //
59. /*
60. * ftpClient =FtpClient.create();
61. * ftpClient.connect(new InetSocketAddress(ip, port));
62. */
63. //
64. ftpClient = FtpClient.create(ip);
65. ftpClient.login(user, null, password);
66. // 2
67. ftpClient.setBinaryType();
68. System.out.println("login success!");
69.
70. if (path.length() != 0)
71. {
72. // path
73. ftpClient.changeDirectory(path);
74. }
75. ftpClient.setBinaryType();
76. } catch (IOException ex)
77. {
78. ex.printStackTrace();
79. throw new RuntimeException(ex);
80. }
81.
82. }
83.
84. /**
85. *
86. *
87. */
88.
89. public void closeConnect()
90. {
91. try
92. {
93. ftpClient.close();
94. System.out.println("disconnect success");
95. } catch (IOException ex)
96. {
97. System.out.println("not disconnect");
98. ex.printStackTrace();
99. throw new RuntimeException(ex);
100. }
101. }
102.
103. /**
104. *
105. *
106. *
107. * @param localFile
108. *
109. * @param remoteFile
110. *
111. * @throws FtpProtocolException
112. */
113. public void upload(String localFile, String remoteFile) throws FtpProtocolException
114. {
115. this.localfilename = localFile;
116. this.remotefilename = remoteFile;
117. TelnetOutputStream os = null;
118. FileInputStream is = null;
119. try
120. {
121. //
122. os = (TelnetOutputStream) ftpClient.putFileStream(this.remotefilename, true);
123.
124. //
125. File file_in = new File(this.localfilename);
126. is = new FileInputStream(file_in);
127.
128. //
129. byte[] bytes = new byte[1024];
130. int c;
131. while ((c = is.read(bytes)) != -1)
132. {
133. os.write(bytes, 0, c);
134. }
135. System.out.println("upload success");
136. } catch (IOException ex)
137. {
138. System.out.println("not upload");
139. ex.printStackTrace();
140. throw new RuntimeException(ex);
141. } finally
142. {
143. try
144. {
145. if (is != null)
146. {
147. is.close();
148. }
149. } catch (IOException e)
150. {
151. e.printStackTrace();
152. } finally
153. {
154. try
155. {
156. if (os != null)
157. {
158. os.close();
159. }
160. } catch (IOException e)
161. {
162. e.printStackTrace();
163. }
164. }
165. }
166. }
167.
168. /**
169. *
170. *
171. *
172. * @param remoteFile
173. * ( )
174. * @param localFile
175. * ( )
176. * @throws FtpProtocolException
177. *
178. */
179. public void download(String remoteFile, String localFile) throws FtpProtocolException
180. {
181. TelnetInputStream is = null;
182. FileOutputStream os = null;
183. try
184. {
185.
186. // filename, TelnetInputStream 。
187. is = (TelnetInputStream) ftpClient.getFileStream(remoteFile);
188. File file_in = new File(localFile);
189. os = new FileOutputStream(file_in);
190.
191. byte[] bytes = new byte[1024];
192. int c;
193. while ((c = is.read(bytes)) != -1)
194. {
195. os.write(bytes, 0, c);
196. }
197. System.out.println("download success");
198. } catch (IOException ex)
199. {
200. System.out.println("not download");
201. ex.printStackTrace();
202. throw new RuntimeException(ex);
203. } finally
204. {
205. try
206. {
207. if (is != null)
208. {
209. is.close();
210. }
211. } catch (IOException e)
212. {
213. e.printStackTrace();
214. } finally
215. {
216. try
217. {
218. if (os != null)
219. {
220. os.close();
221. }
222. } catch (IOException e)
223. {
224. e.printStackTrace();
225. }
226. }
227. }
228. }
229.
230. /**
231. *
232. *
233. * @param agrs
234. */
235. public static void main(String agrs[])
236. {
237.
238. String filepath[] =
239. { "/temp/aa.txt", "/temp/regist.log" };
240. String localfilepath[] =
241. { "C:\\tmp\\1.txt", "C:\\tmp\\2.log" };
242. FtpJdk ftp = new FtpJdk();
243. /*
244. * 、 、 FTP
245. */
246. try
247. {
248. ftp.connectServer("127.0.0.1", 22, "boonya", "user@", "/temp");
249. } catch (FtpProtocolException e)
250. {
251. e.printStackTrace();
252. }
253. //
254. for (int i = 0; i < filepath.length; i++)
255. {
256. try
257. {
258. ftp.download(filepath[i], localfilepath[i]);
259. } catch (FtpProtocolException e)
260. {
261. e.printStackTrace();
262. }
263. }
264. String localfile = "E:\\contact.txt";
265. String remotefile = "/temp/records.txt";
266. //
267. try
268. {
269. ftp.upload(localfile, remotefile);
270. } catch (FtpProtocolException e)
271. {
272. e.printStackTrace();
273. }
274. ftp.closeConnect();
275. }
276.
277.}
자바 가 FTP 로 다운로드 파일 을 업로드 하 는 도 구 는 매우 많 습 니 다. 여기 서 저 는 자바 자체 API 를 사용 하여 FTP 로 다운로드 파일 을 업로드 합 니 다.또 JDK 1.7 이전 버 전과 그 이후 버 전의 API 가 크게 바 뀌 었 다.
예 를 들 면:
JDK 1.7 이전
JDK1.7
ftpClient = new FtpClinet()
ftpClient = FtpClient.create(ip)
ftpclient.login(user,password)
ftpclient.login(user,null,password)
ftpclient.binary()
ftpClient.setBinaryType();
FTP 서버 연결
1: public class FTPUtil {
2: //FTP IP
3: public final static String FTP_HOST = "10.103.240.255";
4:
5: //FTP
6: public final static int FTP_PORT = 21;
7:
8: //FTP
9: public final static String FTP_USER = "bloodHunter";
10:
11: //
12: public final static String FTP_PASSWORD = "wbljy";
13:
14:
15: public static FtpClient getConnect()
16: {
17: try {
18: FtpClient ftpClient = FtpClient.create(FTP_HOST);
19: ftpClient.login(FTP_USER, FTP_PASSWORD.toCharArray());
20: return ftpClient;
21: } catch (FtpProtocolException e) {
22: // TODO Auto-generated catch block
23: e.printStackTrace();
24: System.out.println("Connect to FTP Server fail!");
25: return null;
26: } catch (IOException e) {
27: // TODO Auto-generated catch block
28: e.printStackTrace();
29: System.out.println("Connect to FTP Server fail!");
30: return null;
31: }
32:
33: }
34: }
파일 업로드
1: /*
2: * ftp file upload
3: * @param path
4: * @param fileName
5: * @return true, false
6: * */
7:
8: public static boolean FtpUpload(String path,String fileName)
9: {
10: TelnetOutputStream os = null;
11: FileInputStream is = null;
12: FtpClient ftpClient = getConnect();
13: try {
14: ftpClient.setBinaryType();
15: os = (TelnetOutputStream) ftpClient.putFileStream(fileName, true);
16: is = new FileInputStream(new File(path));
17: byte[] buffer = new byte[1024];
18: int c;
19: while((c = is.read(buffer)) != -1)
20: {
21: os.write(buffer,0,c);
22: }
23: System.out.println("Upload Success!");
24: return true;
25: } catch (Exception e) {
26: // TODO: handle exception
27: e.printStackTrace();
28: System.out.println("Upload fail!");
29: return false;
30: }finally{
31: try {
32: ftpClient.close();
33: is.close();
34: os.close();
35: } catch (IOException e) {
36: // TODO Auto-generated catch block
37: e.printStackTrace();
38: }
39: }
40: }
파일 다운로드
1: /*
2: * ftp file download
3: * @param path
4: * @param fileName
5: * @return true, false
6: * */
7: public static boolean FtpDownload(String path,String fileName)
8: {
9: FileInputStream is = null;
10: FileOutputStream os = null;
11: FtpClient ftpClient = getConnect();
12: try {
13: is = (FileInputStream) ftpClient.getFileStream(fileName);
14: os = new FileOutputStream(new File(path));
15: byte[] buffer = new byte[1024];
16: int c;
17: while((c = is.read(buffer)) != -1)
18: {
19: os.write(buffer,0,c);
20: }
21: System.out.println("Download Success!");
22: return true;
23: } catch (FtpProtocolException e) {
24: // TODO Auto-generated catch block
25: e.printStackTrace();
26: System.out.println("Download fail!");
27: return false;
28: } catch (IOException e) {
29: // TODO Auto-generated catch block
30: e.printStackTrace();
31: System.out.println("Download fail");
32: return false;
33: }catch (Exception e) {
34: // TODO: handle exception
35: e.printStackTrace();
36: return false;
37: }
38: finally{
39: try {
40: is.close();
41: os.close();
42: ftpClient.close();
43: } catch (IOException e) {
44: // TODO Auto-generated catch block
45: e.printStackTrace();
46: }
47: }
48: }
FTP 디 렉 터 리 파일 옮 겨 다 니 기
1: /*
2: * FTP getFileList
3: * @param filenames
4: * @param path
5: * */
6: public static void getFtpFileList(List<String> filenames,String path){
7: //DataInputStream ds = null;
8: BufferedReader ds = null;
9: FtpClient ftpClient = getConnect();
10: try {
11: ds = new BufferedReader(new InputStreamReader(ftpClient.nameList(path),"ISO-8859-1"));
12: String line = "";
13: while((line = ds.readLine())!=null){
14: line = new String(line.getBytes("ISO-8859-1"),"GBK");
15: String name[] = line.split("/");
16: filenames.add(name[name.length - 1]);
17: }
18: } catch (FtpProtocolException e) {
19: // TODO Auto-generated catch block
20: e.printStackTrace();
21: } catch (IOException e) {
22: // TODO Auto-generated catch block
23: e.printStackTrace();
24: }finally{
25: try {
26: ds.close();
27: ftpClient.close();
28: } catch (IOException e) {
29: // TODO Auto-generated catch block
30: e.printStackTrace();
31: }
32: }
33: }
사용자 이름 비밀번호 가 설정 되 어 있 지 않 으 면 익명 사용자 로 로그 인 할 수 있 습 니 다. ftpClient. login ( "anonymous", "[email protected]" );
익명
당신 은 많은 FTP 에 로그 인 할 때 이 걸 사용 합 니 다. 그리고 메 일 주 소 를 마음대로 주 었 습 니 다.
이메일 주 소 를 주지 않 으 면 안 됩 니 다. 그렇지 않 으 면 로그 인하 지 못 하 게 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.