《欢迎转载http://www.cnblogs.com/shizhongtao/p/3345826.html》
- 上传代码就写个简单的小例子。首先要加入jar包。commons-net-1.4.1.jar,
如果是用的maven管理jar包的话,加入如下配置:
1 <dependency> 2 <groupId>commons-net</groupId> 3 <artifactId>commons-net</artifactId> 4 <version>1.4.1</version> 5 </dependency>
- 废话不多说,这里面给出代码:
1 package com.bing.ftpupload; 2 3 import java.io.File; 4 5 import java.io.FileInputStream; 6 7 import java.io.IOException; 8 9 import java.io.InputStream; 10 11 import org.apache.commons.net.ftp.FTPClient; 12 13 import org.apache.commons.net.ftp.FTPReply; 14 15 16 17 public class FtpFileUpload 18 19 { 20 21 22 23 public static boolean uploadFile(String url,// FTP服务器hostname 24 25 int port,// FTP服务器端口 26 27 String username, // FTP登录账号 28 29 String password, // FTP登录密码 30 31 String path, // FTP服务器保存目录 32 33 String filename, // 上传到FTP服务器上的文件名 34 35 InputStream input // 输入流 ) 36 37 { 38 39 boolean result = false; 40 41 FTPClient ftp = new FTPClient(); 42 43 // ftp.setControlEncoding("UTF-8"); 44 45 ftp.setControlEncoding("UTF-8"); 46 47 try 48 49 { 50 51 int reply; 52 53 ftp.connect(url, port);// 连接FTP服务器 54 55 // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 56 57 ftp.login(username, password);// 登录 58 59 reply = ftp.getReplyCode(); 60 61 if (!FTPReply.isPositiveCompletion(reply)) 62 63 { 64 65 ftp.disconnect(); 66 67 return result; 68 69 } 70 71 ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 72 73 ftp.makeDirectory(path); 74 75 ftp.changeWorkingDirectory(path); 76 77 ftp.storeFile(filename, input); 78 79 input.close(); 80 81 ftp.logout(); 82 83 result = true; 84 85 } 86 87 catch (IOException e) 88 89 { 90 91 e.printStackTrace(); 92 93 } 94 95 finally 96 97 { 98 99 if (ftp.isConnected()) 100 101 { 102 103 try 104 105 { 106 107 ftp.disconnect(); 108 109 } 110 111 catch (IOException ioe) 112 113 { 114 115 } 116 117 } 118 119 } 120 121 return result; 122 123 } 124 125 /** 126 127 * 将本地文件上传到FTP服务器上 * 128 129 */ 130 131 public static boolean upLoadFromProduction(String url,// FTP服务器hostname 132 133 int port,// FTP服务器端口 134 135 String username, // FTP登录账号 136 137 String password, // FTP登录密码 138 139 String path, // FTP服务器保存目录 140 141 String filename, // 上传到FTP服务器上的文件名 142 143 String orginfilename // 输入流文件名 144 145 ) 146 147 { 148 149 try 150 151 { 152 153 FileInputStream in = new FileInputStream(new File(orginfilename)); 154 155 boolean flag = uploadFile(url, port, username, password, path, 156 157 filename, in); 158 return flag; 159 } 160 catch (Exception e) 161 162 { 163 e.printStackTrace(); 164 165 } 166 167 return false; 168 169 } 170 171 /** 172 173 * 将本地文件上传到FTP服务器上 174 175 *这个方法和上面的方法作用一样,只是用了默认的文件名 176 177 */ 178 179 public static boolean upLoadFromProduction(String url,// FTP服务器hostname 180 int port,// FTP服务器端口 181 String username, // FTP登录账号 182 String password, // FTP登录密码 183 String path, // FTP服务器保存目录 184 String orginfilename // 输入流文件名 185 186 ) 187 188 { 189 try 190 191 { 192 193 String filename=new File(orginfilename).getName(); 194 195 boolean flag = upLoadFromProduction(url, port, username, password, path, 196 filename, orginfilename); 197 return flag; 198 } 199 catch (Exception e) 200 201 { 202 e.printStackTrace(); 203 } 204 205 return false; 206 207 } 208 209 }
对于上面代码中对应jar包的api地址:
https://commons.apache.org/proper/commons-net/javadocs/api-1.4.1/index.html
然后用junit测试下代码:
1 @Test 2 3 public void uploadfile() 4 5 { 6 7 String path="E:/updatexml/mph201392830451.xml"; 8 9 String url="192.168.3.57"; 10 11 int port=21; 12 13 String username="gaea"; 14 15 String password="gaea"; 16 17 FtpFileUpload.upLoadFromProduction(url, port, username, password, "testxml", path); 18 19 }
在上面的代码中,你如果想灵活点控制上传目录可以稍微修改下代码:
if (path!=null) {
//在ftp根目录下穿件文件夹 ftp.makeDirectory(path);
//更改ftp上传的路径 ftp.changeWorkingDirectory(path); }
这样如果你的path路径为空的话,就会上传到ftp的根目录下面。
注意:url如果写作"ftp:192.168.3.57";就会报异常,具体原因没有探究过
java.net.UnknownHostException: ftp:192.168.3.57