转 java通过ftp上传、下载文件,遍历文件目录
001import java.io.DataInputStream;002import java.io.File;
003import java.io.FileInputStream;
004import java.io.FileOutputStream;
005import java.io.IOException;
006import java.util.ArrayList;
007import java.util.List;
008
009import org.apache.catalina.tribes.util.Logs;
010
011import sun.net.TelnetInputStream;
012import sun.net.TelnetOutputStream;
013import sun.net.ftp.FtpClient;
014
015public class DownFileForFtp {
016 FtpClient ftpClient;
017 private String server = "ip";
018 private int port = 21;
019 private String userName = "usn";
020 private String userPassword = "pwd";
021
022 /**
023 * 链接到服务器
024 *
025 * @return
026 */
027 public boolean open() {
028 if (ftpClient != null && ftpClient.serverIsOpen())
029 return true;
030 try {
031 ftpClient = new FtpClient();
032 ftpClient.openServer(server, port);
033 ftpClient.login(userName, userPassword);
034 ftpClient.binary();
035 return true;
036 } catch (Exception e) {
037 e.printStackTrace();
038 ftpClient = null;
039 return false;
040 }
041 }
042
043 public boolean cd(String dir) {
044 boolean f = false;
045 try {
046 ftpClient.cd(dir);
047 } catch (IOException e) {
048 //Logs.error(e.toString());
049 return f;
050 }
051 return true;
052 }
053
054 /**
055 * 上传文件到FTP服务器
056 *
057 * @param localPathAndFileName
058 * 本地文件目录和文件名
059 * @param ftpFileName
060 * 上传后的文件名
061 * @param ftpDirectory
062 * FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录
063 * @throws Exception
064 */
065 public boolean upload(String localDirectoryAndFileName, String ftpFileName,
066 String ftpDirectory) throws Exception {
067 if (!open())
068 return false;
069 FileInputStream is = null;
070 TelnetOutputStream os = null;
071 try {
072 char ch = ' ';
073 if (ftpDirectory.length() > 0)
074 ch = ftpDirectory.charAt(ftpDirectory.length() - 1);
075 for (; ch == '/' || ch == '\\'; ch = ftpDirectory
076 .charAt(ftpDirectory.length() - 1))
077 ftpDirectory = ftpDirectory.substring(0,
078 ftpDirectory.length() - 1);
079
080 int slashIndex = ftpDirectory.indexOf(47);
081 int backslashIndex = ftpDirectory.indexOf(92);
082 int index = slashIndex;
083 String dirall = ftpDirectory;
084 if (backslashIndex != -1 && (index == -1 || index > backslashIndex))
085 index = backslashIndex;
086 String directory = "";
087 while (index != -1) {
088 if (index > 0) {
089 String dir = dirall.substring(0, index);
090 directory = directory + "/" + dir;
091 ftpClient.sendServer("XMKD " + directory + "\r\n");
092 ftpClient.readServerResponse();
093 }
094 dirall = dirall.substring(index + 1);
095 slashIndex = dirall.indexOf(47);
096 backslashIndex = dirall.indexOf(92);
097 index = slashIndex;
098 if (backslashIndex != -1
099 && (index == -1 || index > backslashIndex))
100 index = backslashIndex;
101 }
102 ftpClient.sendServer("XMKD " + ftpDirectory + "\r\n");
103 ftpClient.readServerResponse();
104
105 os = ftpClient.put(ftpDirectory + "/" + ftpFileName);
106 File file_in = new File(localDirectoryAndFileName);
107 is = new FileInputStream(file_in);
108 byte bytes[] = new byte;
109 int i;
110 while ((i = is.read(bytes)) != -1)
111 os.write(bytes, 0, i);
112 // 清理垃圾
113
114 return true;
115 } catch (Exception e) {
116 e.printStackTrace();
117 return false;
118 } finally {
119 if (is != null)
120 is.close();
121 if (os != null)
122 os.close();
123 }
124 }
125
126 /**
127 * 从FTP服务器上下载文件并返回下载文件长度
128 *
129 * @param ftpDirectoryAndFileName
130 * @param localDirectoryAndFileName
131 * @return
132 * @throws Exception
133 */
134 public long download(String ftpDirectoryAndFileName,
135 String localDirectoryAndFileName) throws Exception {
136 long result = 0;
137 if (!open())
138 return result;
139 TelnetInputStream is = null;
140 FileOutputStream os = null;
141 try {
142 is = ftpClient.get(ftpDirectoryAndFileName);
143 java.io.File outfile = new java.io.File(localDirectoryAndFileName);
144 os = new FileOutputStream(outfile);
145 byte[] bytes = new byte;
146 int c;
147 while ((c = is.read(bytes)) != -1) {
148 os.write(bytes, 0, c);
149 result = result + c;
150 }
151 } catch (Exception e) {
152 throw e;
153 } finally {
154 if (is != null)
155 is.close();
156 if (os != null)
157 os.close();
158
159 }
160 return result;
161 }
162
163 /**
164 * 返回FTP目录下的文件列表
165 *
166 * @param ftpDirectory
167 * @return
168 */
169 public List<String> getFileNameList(String ftpDirectory) {
170 List<String> list = new ArrayList<String>();
171 if (!open())
172 return list;
173 try {
174 DataInputStream dis = new DataInputStream(
175 ftpClient.nameList(ftpDirectory));
176 String filename = "";
177 while ((filename = dis.readLine()) != null) {
178 list.add(filename);
179 System.out.println(filename);
180 }
181 } catch (Exception e) {
182 e.printStackTrace();
183 }
184 return list;
185 }
186
187 /**
188 * 删除FTP上的文件
189 *
190 * @param ftpDirAndFileName
191 */
192 public boolean deleteFile(String ftpDirAndFileName) {
193 if (!open())
194 return false;
195 ftpClient.sendServer("DELE " + ftpDirAndFileName + "\r\n");
196 return true;
197 }
198
199 /**
200 * 删除FTP目录
201 *
202 * @param ftpDirectory
203 */
204 public boolean deleteDirectory(String ftpDirectory) {
205 if (!open())
206 return false;
207 ftpClient.sendServer("XRMD " + ftpDirectory + "\r\n");
208 return true;
209 }
210
211 /**
212 * 关闭链接
213 */
214 public void close() {
215 try {
216 if (ftpClient != null && ftpClient.serverIsOpen())
217 ftpClient.closeServer();
218 } catch (Exception e) {
219
220 }
221 }
222
223 public static void main(String []args) throws Exception{
224 DownFileForFtp df = new DownFileForFtp();
225 df.getFileNameList("E:\\uploadfiles\\cat");
226 df.download("E:\\uploadfiles\\cat\\2012-03-29.11.00.00.012.xml", "F:\\temp\\ftpdown\\2012-03-29.11.00.00.012.xml");
227
228 }
229
230}
页:
[1]