利用FtpClient实现上传下载及获得文件目录

sun代码中有个FtpClient,虽然没有把它用做公开的工具包,但我们也还是可以拿它来利用一下.
 
 
 


Java代码  
1./** 
2. * FTP文件上传与下载 
3. * notice: 
4. * 之所以每次都要连接一次ftp是让它的目录重新返回到相对的根目录, 
5. * 如果复用上次的FtpClient则可能它当前在FTP的目录不是我们想要的 
6. * 目录,所以在FTP上传下载文件时,最好每次都重新登录一下FTP 
7. * @author lgh 
8. */  
9.public class FTPClient {  
10.  
11.    private FtpClient ftpClient;  
12.    private String ip;  
13.    private int port;  
14.    private String username;  
15.    private String password;  
16.  
17.    public FTPClient() {  
18.    }  
19.  
20.    public FTPClient(String ip, int port, String username, String password) {  
21.        this.ip = ip;  
22.        this.port = port;  
23.        this.username = username;  
24.        this.password = password;  
25.    }  
26.  
27.    /** 
28.     * 需要备份的文件 
29.     * @param list 
30.     * @return 
31.     */  
32.    private List needBackFile(List list, String relativeName) {  
33.        List fileNames = new ArrayList();  
34.        for (int i = 0; i < list.size(); i++) {  
35.            String temp = (String) list.get(i);  
36.            if (temp.indexOf(relativeName) > 0) {  
37.                fileNames.add(temp);  
38.            }  
39.        }  
40.        return fileNames;  
41.    }  
42.  
43.    public static void main(String[] args) {  
44.        FTPClient client = new FTPClient(".....", 21, "...", "....");  
45.  
46.        try {  
47.//            client.downloadFile("CRM/ccbcrm/", "D://", "CRMClientLog.log", "CRMClientLog.log");  
48.//            client.uploadFile("", "D://", "CRMClientLog.log");  
49.            List list = client.getList("csrtestftp/网络/", false);  
50.        } catch (Exception ex) {  
51.            Logger.getLogger(FTPClient.class.getName()).log(Level.SEVERE, null, ex);  
52.        }  
53.    }  
54.  
55.    /** 
56.     * 关闭FTP连接  
57.     * @throws java.lang.Exception 
58.     */  
59.    public void closeServer() throws Exception {  
60.        ftpClient.closeServer();  
61.    }  
62.  
63.    /** 
64.     * 连接ftp服务器 
65.     * @param ip 
66.     * @param port 
67.     * @param user 
68.     * @param pwd 
69.     * @return 
70.     * @throws Exception 
71.     */  
72.    public boolean connectServer(String ip, int port, String user, String pwd)  
73.            throws Exception {  
74.        boolean isSuccess = false;  
75.        try {  
76.            ftpClient = new FtpClient();  
77.            ftpClient.openServer(ip, port);  
78.            ftpClient.login(user, pwd);  
79.            isSuccess = true;  
80.        } catch (Exception ex) {  
81.            ex.printStackTrace();  
82.        }  
83.        return isSuccess;  
84.    }  
85.  
86.    /** 
87.     * 获得远程下的目录 
88.     * @param remotePath 远程目录 
89.     * @param fullPath 是否需要完整路径 
90.     * @return 
91.     */  
92.    public List getList(String remotePath, boolean fullPath) {  
93.        List list = new ArrayList();  
94.        try {  
95.            if (connectServer(ip, port, username, password)) {  
96.                BufferedReader br = new BufferedReader(new InputStreamReader(ftpClient.nameList(remotePath)));  
97.                String temp = ftpClient.getResponseString();  
98.                System.out.println(temp);  
99.                String readLine = null;  
100.                int lastIndex;  
101.                if ((lastIndex = remotePath.lastIndexOf("/")) > 0||(lastIndex = remotePath.lastIndexOf("//")) > 0  
102.                    ||(lastIndex = remotePath.lastIndexOf("\\")) > 0||(lastIndex = remotePath.lastIndexOf(File.separator)) > 0) {  
103.                    remotePath = remotePath.substring(0, lastIndex);  
104.                }   //去掉remotePath的后缀,可能是'/',也有可能是其他符号  
105.                while ((readLine = br.readLine()) != null) {  
106.  
107.                    if (!fullPath) {  
108.                        list.add(readLine.substring(remotePath.length() + 1, readLine.length()));  
109.                        System.out.println(readLine.substring(remotePath.length() + 1, readLine.length()));  
110.                    } else {  
111.                        list.add(readLine);  
112.                        System.out.println(readLine);  
113.                    }  
114.                }  
115.                ftpClient.closeServer();  
116.            }  
117.        } catch (Exception ex) {  
118.            ex.printStackTrace();  
119.        }  
120.        return list;  
121.    }  
122.  
123.    /** 
124.     * 下载文件 
125.     * @param remotePath 
126.     * @param localPath 
127.     * @param filename 
128.     * @throws Exception 
129.     */  
130.    public void downloadFile(String remotePath, String localPath, String remoteFileName, String localFileName) throws Exception {  
131.        try {  
132.            if (connectServer(ip, port, username, password)) {  
133.                if (remotePath.length() != 0) {  
134.                    ftpClient.cd(remotePath);  
135.                }  
136.                ftpClient.binary();  
137.                TelnetInputStream is = ftpClient.get(remoteFileName);  
138.                File fp = new File(localPath);  
139.                if (!fp.exists()) {  
140.                    fp.mkdirs();  
141.                }  
142.                File file_out = new File(localPath + File.separator + localFileName);  
143.                FileOutputStream os = new FileOutputStream(file_out);  
144.                byte[] bytes = new byte[1024];  
145.                int readBye;  
146.                while ((readBye = is.read(bytes)) != -1) {  
147.                    os.write(bytes, 0, readBye);  
148.                }  
149.                is.close();  
150.                os.close();  
151.                ftpClient.closeServer();  
152.            }  
153.        } catch (Exception ex) {  
154.            ex.printStackTrace();  
155.        }  
156.    }  
157.  
158.    /** 
159.     * 上传文件 
160.     * @param remotePath 
161.     * @param localPath 
162.     * @param filename 
163.     * @throws Exception 
164.     */  
165.    public void uploadFile(String remotePath, String localPath, String filename) throws Exception {  
166.        try {  
167.            if (connectServer(ip, port, username, password)) {  
168.                if (remotePath.length() != 0) {  
169.                    ftpClient.cd(remotePath);  
170.                }  
171.                ftpClient.binary();  
172.                TelnetOutputStream os = ftpClient.put(filename);  
173.                File file_in = new File(localPath + File.separator + filename);  
174.                FileInputStream is = new FileInputStream(file_in);  
175.                byte[] bytes = new byte[1024];  
176.                int readBye;  
177.                while ((readBye = is.read(bytes)) != -1) {  
178.                    os.write(bytes, 0, readBye);  
179.                }  
180.                is.close();  
181.                os.close();  
182.                ftpClient.closeServer();  
183.            }  
184.        } catch (Exception ex) {  
185.            ex.printStackTrace();  
186.        }  
187.    }  
188.  
189.    /** 
190.     * @return the ip 
191.     */  
192.    public String getIp() {  
193.        return ip;  
194.    }  
195.  
196.    /** 
197.     * @param ip the ip to set 
198.     */  
199.    public void setIp(String ip) {  
200.        this.ip = ip;  
201.    }  
202.  
203.    /** 
204.     * @return the port 
205.     */  
206.    public int getPort() {  
207.        return port;  
208.    }  
209.  
210.    /** 
211.     * @param port the port to set 
212.     */  
213.    public void setPort(int port) {  
214.        this.port = port;  
215.    }  
216.  
217.    /** 
218.     * @return the username 
219.     */  
220.    public String getUsername() {  
221.        return username;  
222.    }  
223.  
224.    /** 
225.     * @param username the username to set 
226.     */  
227.    public void setUsername(String username) {  
228.        this.username = username;  
229.    }  
230.  
231.    /** 
232.     * @return the password 
233.     */  
234.    public String getPassword() {  
235.        return password;  
236.    }  
237.  
238.    /** 
239.     * @param password the password to set 
240.     */  
241.    public void setPassword(String password) {  
242.        this.password = password;  
243.    }  
244.}  


原文:http://lgh3292.iteye.com/blog/368819

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值