ftpUtil写法,记录一下
Posted wangquanyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftpUtil写法,记录一下相关的知识,希望对你有一定的参考价值。
这个写法我试过可以用,项目中用到的,记录一下。
代码:
1 import org.apache.commons.net.ftp.FTPClient; 2 import org.apache.commons.net.ftp.FTPFile; 3 import org.apache.commons.net.ftp.FTPReply; 4 5 import java.io.*; 6 import java.net.MalformedURLException; 7 8 public class FtpUtils 9 //ftp服务器地址 10 public String hostname = "192.168.1.249"; 11 //ftp服务器端口号默认为21 12 public Integer port = 21 ; 13 //ftp登录账号 14 public String username = "root"; 15 //ftp登录密码 16 public String password = "123"; 17 18 public FTPClient ftpClient = null; 19 20 /** 21 * 初始化ftp服务器 22 */ 23 public void initFtpClient() 24 ftpClient = new FTPClient(); 25 ftpClient.setControlEncoding("utf-8"); 26 try 27 System.out.println("connecting...ftp服务器:"+this.hostname+":"+this.port); 28 ftpClient.connect(hostname, port); //连接ftp服务器 29 ftpClient.login(username, password); //登录ftp服务器 30 int replyCode = ftpClient.getReplyCode(); //是否成功登录服务器 31 if(!FTPReply.isPositiveCompletion(replyCode)) 32 System.out.println("connect failed...ftp服务器:"+this.hostname+":"+this.port); 33 34 System.out.println("connect successfu...ftp服务器:"+this.hostname+":"+this.port); 35 catch (MalformedURLException e) 36 e.printStackTrace(); 37 catch (IOException e) 38 e.printStackTrace(); 39 40 41 42 /** 43 * 上传文件 44 * @param pathname ftp服务保存地址 45 * @param fileName 上传到ftp的文件名 46 * @param originfilename 待上传文件的名称(绝对地址) * 47 * @return 48 */ 49 public boolean uploadFile( String pathname, String fileName,String originfilename) 50 boolean flag = false; 51 InputStream inputStream = null; 52 try 53 System.out.println("开始上传文件"); 54 inputStream = new FileInputStream(new File(originfilename)); 55 initFtpClient(); 56 ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE); 57 CreateDirecroty(pathname); 58 ftpClient.makeDirectory(pathname); 59 ftpClient.changeWorkingDirectory(pathname); 60 ftpClient.storeFile(fileName, inputStream); 61 inputStream.close(); 62 ftpClient.logout(); 63 flag = true; 64 System.out.println("上传文件成功"); 65 catch (Exception e) 66 System.out.println("上传文件失败"); 67 e.printStackTrace(); 68 finally 69 if(ftpClient.isConnected()) 70 try 71 ftpClient.disconnect(); 72 catch(IOException e) 73 e.printStackTrace(); 74 75 76 if(null != inputStream) 77 try 78 inputStream.close(); 79 catch (IOException e) 80 e.printStackTrace(); 81 82 83 84 return true; 85 86 /** 87 * 上传文件 88 * @param pathname ftp服务保存地址 89 * @param fileName 上传到ftp的文件名 90 * @param inputStream 输入文件流 91 * @return 92 */ 93 public boolean uploadFile( String pathname, String fileName,InputStream inputStream) 94 boolean flag = false; 95 try 96 System.out.println("开始上传文件"); 97 initFtpClient(); 98 ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE); 99 CreateDirecroty(pathname); 100 ftpClient.makeDirectory(pathname); 101 ftpClient.changeWorkingDirectory(pathname); 102 ftpClient.storeFile(fileName, inputStream); 103 inputStream.close(); 104 ftpClient.logout(); 105 flag = true; 106 System.out.println("上传文件成功"); 107 catch (Exception e) 108 System.out.println("上传文件失败"); 109 e.printStackTrace(); 110 finally 111 if(ftpClient.isConnected()) 112 try 113 ftpClient.disconnect(); 114 catch(IOException e) 115 e.printStackTrace(); 116 117 118 if(null != inputStream) 119 try 120 inputStream.close(); 121 catch (IOException e) 122 e.printStackTrace(); 123 124 125 126 return true; 127 128 //改变目录路径 129 public boolean changeWorkingDirectory(String directory) 130 boolean flag = true; 131 try 132 flag = ftpClient.changeWorkingDirectory(directory); 133 if (flag) 134 System.out.println("进入文件夹" + directory + " 成功!"); 135 136 else 137 System.out.println("进入文件夹" + directory + " 失败!开始创建文件夹"); 138 139 catch (IOException ioe) 140 ioe.printStackTrace(); 141 142 return flag; 143 144 145 //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建 146 public boolean CreateDirecroty(String remote) throws IOException 147 boolean success = true; 148 String directory = remote + "/"; 149 // 如果远程目录不存在,则递归创建远程服务器目录 150 if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) 151 int start = 0; 152 int end = 0; 153 if (directory.startsWith("/")) 154 start = 1; 155 else 156 start = 0; 157 158 end = directory.indexOf("/", start); 159 String path = ""; 160 String paths = ""; 161 while (true) 162 String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1"); 163 path = path + "/" + subDirectory; 164 if (!existFile(path)) 165 if (makeDirectory(subDirectory)) 166 changeWorkingDirectory(subDirectory); 167 else 168 System.out.println("创建目录[" + subDirectory + "]失败"); 169 changeWorkingDirectory(subDirectory); 170 171 else 172 changeWorkingDirectory(subDirectory); 173 174 175 paths = paths + "/" + subDirectory; 176 start = end + 1; 177 end = directory.indexOf("/", start); 178 // 检查所有目录是否创建完毕 179 if (end <= start) 180 break; 181 182 183 184 return success; 185 186 187 //判断ftp服务器文件是否存在 188 public boolean existFile(String path) throws IOException 189 boolean flag = false; 190 FTPFile[] ftpFileArr = ftpClient.listFiles(path); 191 if (ftpFileArr.length > 0) 192 flag = true; 193 194 return flag; 195 196 //创建目录 197 public boolean makeDirectory(String dir) 198 boolean flag = true; 199 try 200 flag = ftpClient.makeDirectory(dir); 201 if (flag) 202 System.out.println("创建文件夹" + dir + " 成功!"); 203 204 else 205 System.out.println("创建文件夹" + dir + " 失败!"); 206 207 catch (Exception e) 208 e.printStackTrace(); 209 210 return flag; 211 212 213 /** * 下载文件 * 214 * @param pathname FTP服务器文件目录 * 215 * @param filename 文件名称 * 216 * @param localpath 下载后的文件路径 * 217 * @return */ 218 public boolean downloadFile(String pathname, String filename, String localpath) 219 boolean flag = false; 220 OutputStream os=null; 221 try 222 System.out.println("开始下载文件"); 223 initFtpClient(); 224 //切换FTP目录 225 ftpClient.changeWorkingDirectory(pathname); 226 FTPFile[] ftpFiles = ftpClient.listFiles(); 227 for(FTPFile file : ftpFiles) 228 if(filename.equalsIgnoreCase(file.getName())) 229 File localFile = new File(localpath + "/" + file.getName()); 230 os = new FileOutputStream(localFile); 231 ftpClient.retrieveFile(file.getName(), os); 232 os.close(); 233 234 235 ftpClient.logout(); 236 flag = true; 237 System.out.println("下载文件成功"); 238 catch (Exception e) 239 System.out.println("下载文件失败"); 240 e.printStackTrace(); 241 finally 242 if(ftpClient.isConnected()) 243 try 244 ftpClient.disconnect(); 245 catch(IOException e) 246 e.printStackTrace(); 247 248 249 if(null != os) 250 try 251 os.close(); 252 catch (IOException e) 253 e.printStackTrace(); 254 255 256 257 return flag; 258 259 260 /** * 删除文件 * 261 * @param pathname FTP服务器保存目录 * 262 * @param filename 要删除的文件名称 * 263 * @return */ 264 public boolean deleteFile(String pathname, String filename) 265 boolean flag = false; 266 try 267 System.out.println("开始删除文件"); 268 initFtpClient(); 269 //切换FTP目录 270 ftpClient.changeWorkingDirectory(pathname); 271 ftpClient.dele(filename); 272 ftpClient.logout(); 273 flag = true; 274 System.out.println("删除文件成功"); 275 catch (Exception e) 276 System.out.println("删除文件失败"); 277 e.printStackTrace(); 278 finally 279 if(ftpClient.isConnected()) 280 try 281 ftpClient.disconnect(); 282 catch(IOException e) 283 e.printStackTrace(); 284 285 286 287 return flag; 288 289 290 public static void main(String[] args) 291 FtpUtils ftp =new FtpUtils(); 292 //ftp.uploadFile("ftpFile/data", "123.docx", "E://123.docx"); 293 //ftp.downloadFile("ftpFile/data", "123.docx", "F://"); 294 ftp.deleteFile("ftpFile/data", "123.docx"); 295 System.out.println("ok"); 296 297
以上是关于ftpUtil写法,记录一下的主要内容,如果未能解决你的问题,请参考以下文章