FTP网络文件传输.docx
《FTP网络文件传输.docx》由会员分享,可在线阅读,更多相关《FTP网络文件传输.docx(25页珍藏版)》请在冰豆网上搜索。
FTP网络文件传输
窗体顶端
FTP网络文件传输收藏
| 旧一篇:
多线程技术下载文件
需要用到JAVAAPI提供的FtpClient,TelnetInputStream,RandomAccessFile等几个类.
(1)FtpClient类负责客户端与服务器端的通讯,实现了客户端FTP传输的功能.
(2)TelnetInputStream类负责辅助完成FTP的传输,是一种输入流类(3)RandomAccessFile类文件随机访问下面实现一个FTP客户端程序,用来下载FTP服务端的文件,实现步骤如下:
(1)输入服务器名以及用于登录的用户名和密码,登录FTP服务器
(2)登录成功后,列出服务器端的目录和文件名(3)选择要下载的文件和存储的本机目录完成文件下载创建一个包含main()方法的客户端FtpClientFrame类
viewplaincopytoclipboardprint?
1.package ftpclient;
2.
3.import java.awt.*;
4.
5.import java.awt.event.*;
6.
7.import javax.swing.*;
8.
9.import .ftp.*;
10.
11.import .*;
12.
13.import java.io.*;
14.
15.
16.
17.public class FtpClientFrame extends JFrame{
18.
19. JPanel contentPane;
20.
21. Label labelPrompt=new Label();
22.
23. Label labelHost=new Label();
24.
25. TextField textFieldHost=new TextField();
26.
27. Label labelUser=new Label();
28.
29. TextField textFieldUser=new TextField();
30.
31. Label labelPassword=new Label();
32.
33. TextField textFieldPassword=new TextField();
34.
35. Button buttonLink=new Button();
36.
37. Button buttonDisconnect=new Button();
38.
39. Label labelFileShow=new Label();
40.
41. TextArea textAreaContent=new TextArea();
42.
43. Label labelFile=new Label();
44.
45. TextField textFieldFile=new TextField();
46.
47. Label labelDir=new Label();
48.
49. TextField textFieldDir=new TextField();
50.
51. Button buttonDownload=new Button();
52.
53. FtpClient myFtp=null;
54.
55. TelnetInputStream inStream=null;
56.
57.
58.
59. public FtpClientFrame(){
60.
61. try{
62.
63. jbInit();
64.
65. }
66.
67. catch(Exception e){
68.
69. e.printStackTrace();
70.
71. }
72.
73. }
74.
75.
76.
77. private void jbInit() throws Exception{
78.
79. contentPane=(JPanel)this.getContentPane();
80.
81. contentPane.setLayout(null);
82.
83. labelPrompt.setBounds(new Rectangle(25,6,180,22));
84.
85. labelHost.setText("主机名");
86.
87. labelHost.setBounds(new Rectangle(25,38,50,22));
88.
89. textFieldHost.setBounds(new Rectangle(78,38,280,22));
90.
91. labelUser.setText("用户名");
92.
93. labelUser.setBounds(new Rectangle(25,70,50,22));
94.
95. textFieldUser.setBounds(new Rectangle(78,70,114,22));
96.
97. labelPassword.setText("密码:
");
98.
99. labelPassword.setBounds(new Rectangle(205,70,37,22));
100.
101. textFieldPassword.setBounds(new Rectangle(244,70,114,22));
102.
103. textFieldPassword.setEchoChar('*');
104.
105. buttonLink.setLabel("连接");
106.
107. buttonLink.setBounds(new Rectangle(375,38,70,22));
108.
109. buttonLink.addActionListener(new ActionListener(){
110.
111. public void actionPerformed(ActionEvent e){
112.
113. buttonLink_actionPerformed(e);
114.
115. }
116.
117. });
118.
119. buttonLink.setEnabled(true);
120.
121. buttonDisconnect.setLabel("断开");
122.
123. buttonDisconnect.setBounds(new Rectangle(375,70,70,22));
124.
125. buttonDisconnect.addActionListener(new ActionListener(){
126.
127. public void actionPerformed(ActionEvent e){
128.
129. buttonDisconnect_actionPerformed(e);
130.
131. }
132.
133. });
134.
135. buttonDisconnect.setEnabled(false);
136.
137. labelFileShow.setText("目录列表");
138.
139. labelFileShow.setBounds(new Rectangle(25,105,140,22));
140.
141. textAreaContent.setBounds(new Rectangle(25,135,420,235));
142.
143. textAreaContent.setEditable(false);
144.
145. labelFile.setText("欲下载的文件");
146.
147. labelFile.setBounds(new Rectangle(25,380,100,22));
148.
149. textFieldFile.setBounds(new Rectangle(128,380,230,22));
150.
151. labelDir.setText("存放文件的路径");
152.
153. labelDir.setBounds(new Rectangle(25,412,100,22));
154.
155. textFieldDir.setBounds(new Rectangle(1285,412,230,22));
156.
157. buttonDownload.setLabel("下载");
158.
159. buttonDownload.setBounds(new Rectangle(375,412,70,22));
160.
161. buttonDownload.addActionListener(new ActionListener(){
162.
163. public void actionPerformed(ActionEvent e){
164.
165. buttonDownload_actionPerformed(e);
166.
167. }
168.
169. });
170.
171. buttonDownload.setEnabled(false);
172.
173. contentPane.add(labelPrompt,null);
174.
175. contentPane.add(labelHost,null);
176.
177. contentPane.add(textFieldHost,null);
178.
179. contentPane.add(labelUser,null);
180.
181. contentPane.add(textFieldUser,null);
182.
183. contentPane.add(labelPassword,null);
184.
185. contentPane.add(textFieldPassword,null);
186.
187. contentPane.add(buttonLink,null);
188.
189. contentPane.add(buttonDisconnect,null);
190.
191. contentPane.add(labelFileShow,null);
192.
193. contentPane.add(textAreaContent,null);
194.
195. contentPane.add(textFieldFile,null);
196.
197. contentPane.add(labelFile,null);
198.
199. contentPane.add(labelDir,null);
200.
201. contentPane.add(textFieldDir,null);
202.
203. contentPane.add(buttonDownload,null);
204.
205. enableEvents(AWTEvent.WINDOW_EVENT_MASK);
206.
207. this.setSize(new Dimension(480,485));
208.
209. this.setResizable(false);
210.
211. this.setTitle("ftp客户端");
212.
213. this.setVisible(true);
214.
215. }
216.
217.
218.
219. void buttonLink_actionPerformed(ActionEvent e){
220.
221. String hostname=textFieldHost.getText();
222.
223. labelPrompt.setText("正在连接...");
224.
225. try{
226.
227. myFtp=new FtpClient(hostname);
228.
229. myFtp.login(textFieldUser.getText(), textFieldPassword.getText());
230.
231. myFtp.binary();
232.
233. showFileContents();
234.
235. }
236.
237. catch(FtpLoginException e1){
238.
239. String strPrompt="用户名密码错误";
240.
241. labelPrompt.setText(strPrompt);
242.
243. }
244.
245. catch(IOException e1){
246.
247. String strPrompt="连接主机"+hostname+"失败";
248.
249. labelPrompt.setText(strPrompt);
250.
251. }
252.
253. catch(SecurityException e1){
254.
255. String strPrompt="无权限与主机:
"+hostname+"连接";
256.
257. labelPrompt.setText(strPrompt);
258.
259. }
260.
261. labelPrompt.setText("连接主机:
"+hostname+"成功");
262.
263. buttonDisconnect.setEnabled(true);
264.
265. buttonDownload.setEnabled(true);
266.
267. buttonLink.setEnabled(false);
268.
269. }
270.
271.
272.
273. void buttonDisconnect_actionPerformed(ActionEvent e){
274.
275. try{
276.
277. myFtp.closeServer();
278.
279. textAreaContent.setText("");
280.
281. labelPrompt.setText("与主机断开");
282.
283. }
284.
285. catch(IOException e1){
286.
287. System.out.println("Error:
"+e1);
288.
289. }
290.
291. buttonLink.setEnabled(true);
292.
293. buttonDownload.setEnabled(false);
294.
295. buttonDisconnect.setEnabled(false);
296.
297. }
298.
299.
300.
301. public void showFileContents(){
302.
303. int ch;
304.
305. StringBuffer buf=new StringBuffer();
306.
307. try{
308.
309. inStream=myFtp.list();
310.
311. while((ch=inStream.read())>=0){
312.
313. buf.append((char)ch);
314.
315. }
316.
317. textAreaContent.append(buf.toString());
318.
319. inStream.close();
320.
321. }
322.
323. catch(Exception e){
324.
325. System.out.println("Error:
"+e);
326.
327. }
328.
329. }
330.
331.
332.
333. void buttonDownload_actionPerformed(ActionEvent e){
334.
335. int ch;
336.
337. StringBuffer buf=new StringBuffer();
338.
339. buf.setLength(0);
340.
341. try{
342.
343. File dir=new File(textFieldDir.getText());
344.
345. File f=new File(dir,textFieldFile.getText());
346.
347. RandomAccessFile file=new RandomAccessFile(f,"rw");
348.
349. inStream=myFtp.get(textFieldFile.getText());
350.
351. while((ch=inStream.read())>=0){
352.
353. buf.append((char)ch);
354.
355.