您的位置:首页 > 编程语言 > PHP开发

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

2012-07-14 01:40 856 查看
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.}


原文:/article/4203136.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐