java实现将文件上传到ftp服务器的方法

时间:2021-10-09 20:16:58

本文实例讲述了java实现将文件上传ftp服务器的方法。分享给大家供大家参考,具体如下:

工具类:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.fz.common.util;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class FileUtil {
 /**
 *
 * @date Sep 26, 2011 10:17:39 AM
 * @return
 * @author zhangh
 */
 public static DataInputStream getInput(){
 DataInputStream d = null;
 try {
  d = new DataInputStream(new FileInputStream("c:/wmc.dat"));
  return d;
 } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return d;
 }
 /**
 *
 * @date Sep 26, 2011 10:17:44 AM
 * @param whites
 * @return
 * @author zhangh
 */
 public static boolean creatWhiteManageFile(byte[] whites,String file) {
 DataOutputStream d;
 try {
  d = new DataOutputStream(new FileOutputStream(file));
  d.write(whites);
  d.flush();
 } catch (Exception e) {
  // TODO Auto-generated catch block
  return false;
//  e.printStackTrace();
 }
 return true;
 }
 /**
 *
 * @date Sep 16, 2011 4:39:22 PM
 * @param url
 * @param username
 * @param password
 * @param path
 * @param filename
 * @param input
 * @return
 * @author zhangh
 */
 public static boolean uploadFile(String url, String username,
  String password, String path, String filename, InputStream input) {
 boolean success = false;
 FTPClient ftp = new FTPClient();
 try {
  int reply;
  ftp.connect(url);
//  ftp.connect(url, port);// 连接FTP服务器
  // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
  ftp.login(username, password);// 登录
  reply = ftp.getReplyCode();
  if (!FTPReply.isPositiveCompletion(reply)) {
  ftp.disconnect();
  return success;
  }
  ftp.changeWorkingDirectory(path);
  ftp.storeFile(filename, input);
  ftp.logout();
  input.close();
  success = true;
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  if (ftp.isConnected()) {
  try {
   ftp.disconnect();
  } catch (IOException ioe) {
  }
  }
 }
 return success;
 }
 /**
 *
 * 方法名称:uploadFileFtp
 * 方法描述:黑名名单,黑用户文件上传ftp服务器
 * @param url
 * @param username
 * @param password
 * @param path
 * @param filename
 * @param input
 * @param input2
 * @return
 * boolean
 * version 1.0
 * author wuxq
 * Oct 26, 2011 3:19:09 PM
 */
 public static boolean uploadFileFtp(String url, String username,
  String password, String path, String filename, InputStream input,
  InputStream input2) {
 Date date = new Date();
 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String time = formatter.format(date);
 boolean success = false;
 FTPClient ftp = new FTPClient();
 try {
  int reply;
  ftp.connect(url);
  ftp.login(username, password);// 登录
  reply = ftp.getReplyCode();
  if (!FTPReply.isPositiveCompletion(reply)) {
  ftp.disconnect();
  return success;
  }
  ftp.changeWorkingDirectory(path);
  ftp.storeFile(filename, input);
  ftp.storeFile(filename + time, input2);
  ftp.logout();
  input.close();
  success = true;
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  if (ftp.isConnected()) {
  try {
   ftp.disconnect();
  } catch (IOException ioe) {
  }
  }
 }
 return success;
 }
}

读取配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.fz.fzbike.domain;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
import com.eNets.framework.util.SysConstants;
/**
 * 获取ftp服务器信息的bean类
 *
 * @author wuxq
 *
 */
public class SysConstats {
 private static Logger log = Logger.getLogger(SysConstats.class);
 public static String FTPSERVER;// ftp服务器ip地址
 public static String FTPUSERNAME;// ftp服务器用户名
 public static String FTPPASSWORD;// ftp服务器用户密码
 public static String ENVELOPERESULTROOT;// 存放ftp服务器的路径
 public SysConstats() {
 try {
  InputStream in = new BufferedInputStream(new FileInputStream(
   SysConstants.PUBLIC_PATH.substring(0,
    SysConstants.PUBLIC_PATH.length() - 7)
    + "/bidfileconfig.properties"));
  Properties prop = new Properties();
  prop.load(in);
  SysConstats.FTPSERVER = prop.getProperty("ftpServer", "none");
  SysConstats.FTPUSERNAME = prop.getProperty("ftpUserName", "none");
  SysConstats.FTPPASSWORD = prop.getProperty("ftpPassword", "none");
  SysConstats.ENVELOPERESULTROOT = prop.getProperty(
   "envelopeResultRoot", "none");
  log.debug("读取ftp配置信息成功!");
 } catch (IOException e) {
  log.debug("读取ftp配置信息失败!");
  e.printStackTrace();
 }
 }
 public static String getFTPSERVER() {
 return FTPSERVER;
 }
 public static void setFTPSERVER(String ftpserver) {
 FTPSERVER = ftpserver;
 }
 public static String getFTPUSERNAME() {
 return FTPUSERNAME;
 }
 public static void setFTPUSERNAME(String ftpusername) {
 FTPUSERNAME = ftpusername;
 }
 public static String getFTPPASSWORD() {
 return FTPPASSWORD;
 }
 public static void setFTPPASSWORD(String ftppassword) {
 FTPPASSWORD = ftppassword;
 }
 public static String getENVELOPERESULTROOT() {
 return ENVELOPERESULTROOT;
 }
 public static void setENVELOPERESULTROOT(String enveloperesultroot) {
 ENVELOPERESULTROOT = enveloperesultroot;
 }
 public static void main(String args[]) {
 new SysConstats();
 }
}

将文件上传ftp:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
package com.fz.fzbike.biz;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import com.eNets.basesys.user.vo.UserVO;
import com.eNets.framework.assemble.RequestHashNew;
import com.eNets.framework.database.DBConnection;
import com.fz.common.util.FileUtil;
import com.fz.fzbike.common.StringUtil;
import com.fz.fzbike.domain.SysConstats;
/**
 * 上传卡内码到ftp服务器 生成bat文件
 *
 * @author wuxq 2011-09-28
 */
public class UploadCardInNoFtpAction {
 /**
 *
 * 方法名称:uploadFtp 方法描述:上传文件到ftp
 *
 * @param reh
 *      void version 1.0 author wuxq Sep 28, 2011 10:38:38 AM
 */
 public void uploadFtp(RequestHashNew reh) {
 String cardType = reh.get("cardType").toString();
 DBConnection dbc = reh.getDBC();// 链接数据库
 dbc.endTran();
 // 判断是否是空值 空有可能是挂失,退出挂失, 退出黑名单, 根据卡id得到卡类型
 if (StringUtil.isNull(cardType)) {
  String cardtypesql = "select ci.card_type from lc_t_card_info ci where ci.card_id="
   + reh.get("SELECTEDID");
  cardType = dbc.getList0(cardtypesql);
 }
 String top = "c:/upload/";
 String file = top + "bmc.dat"; // 定义一个目录存放临时的黑名单bat文件
 String whiteFile = top + "wmc.dat";// 定义一个目录存放临时的白名单bat文件
 String buserfile = top + "buser.dat"; // 定义一个目录存放临时的黑用户文件
 String fileID = dbc.setOracleGlideValue("LC_T_UPGRADE_FILE");// 得到文件表的序列号
 // 得到当前用户的ID
 UserVO userVo = reh.getUserVO();
 String UserID = userVo.getUserID();
 DecimalFormat df = new DecimalFormat("0.0");
 if (cardType.equals("7")) {
  StringBuffer bf = new StringBuffer(1024);
  bf
   .append(
    "select distinct card_in_no from(select tc.card_in_no")
   .append(
    " from lc_t_blacklist tb left join lc_t_card_info tc")
   .append(
    " on tb.card_id = tc.card_id where tc.card_type = 7")
   .append(" and tb.whether_effective = 1 union all select")
   .append(" tc.card_in_no from lc_t_card_loss cl left join")
   .append(
    " lc_t_card_info tc on cl.card_id=tc.card_id where tc.card_type = 7 and")
   .append(" cl.whether_effective=1) t order by t.card_in_no");// 黑名单及挂失记录表中所有的管理员记录
  StringBuffer bffer = new StringBuffer(1024);
  bffer
   .append("select ti.card_in_no from lc_t_card_info ti")
   .append(
    " where ti.card_type=7 and ti.card_make_status=2 order by ti.card_in_no");// 卡信息表中所有的管理员记录
  // 定义一个数组来接收黑名单中排序好的管理员卡内码
  String arr[][] = dbc.getArr(bf.toString());
  // 定义一个数组来接收卡信息表中排序好的管理员卡内码
  String listarr[][] = dbc.getArr(bffer.toString());
  upload_f(arr, file);
  // 得到黑名单bat文件的版本号, 初始值为1.0
  String vesionSql = "select file_vesion from(select row_number() over(ORDER BY t.file_vesion DESC) num,"
   + "t.file_vesion from lc_t_upgrade_file t where t.file_type=2) where num=1";
  String vesion = dbc.getList0(vesionSql);
  double ve = 1.0;// 定义黑名单版本编号变量,初始值为1.0
  /*
  * 数据库中存在旧版本则在版本增加0.1
  */
  if (StringUtil.isNotNull(vesion)) {
  ve = (Double.parseDouble(vesion) + 0.1);
  }
  vesion = df.format(ve);
  // 版本记录sql语句
  String bmcsql = "insert into lc_t_upgrade_file values(" + fileID
   + ",'" + file + "','" + vesion + "','2',sysdate," + UserID
   + ")";
  dbc.insertDB(bmcsql);// 持久化到数据库
  upload_f(listarr, whiteFile);
  // 得到白名单bat文件的版本号, 初始值为1.0
  String vesionSql2 = "select file_vesion from(select row_number() over(ORDER BY t.file_vesion DESC) num,"
   + "t.file_vesion from lc_t_upgrade_file t where t.file_type=5) where num=1";
  String vesion2 = dbc.getList0(vesionSql2);
  double ve2 = 1.0;// 定义白名单版本编号变量,初始值为1.0
  /*
  * 数据库中存在旧版本则在版本增加0.1
  */
  if (StringUtil.isNotNull(vesion2)) {
  ve2 = (Double.parseDouble(vesion2) + 0.1);
  }
  String bfileID = dbc.setOracleGlideValue("LC_T_UPGRADE_FILE");// 得到文件表的序列号
  vesion2 = df.format(ve2);
  // 版本记录sql语句
  String bmcsql2 = "insert into lc_t_upgrade_file values(" + bfileID
   + ",'" + whiteFile + "','" + vesion2 + "','5',sysdate,"
   + UserID + ")";
  dbc.insertDB(bmcsql2);// 持久化到数据库
 } else {
  StringBuffer bf2 = new StringBuffer(1024);
  bf2
   .append(
    "select distinct card_in_no from (select tc.card_in_no")
   .append(
    " from lc_t_blacklist tb left join lc_t_card_info tc")
   .append(
    " on tb.card_id = tc.card_id where tc.card_type <> 7")
   .append(" and tb.whether_effective = 1 union all select")
   .append(" tc.card_in_no from lc_t_card_loss cl left join")
   .append(" lc_t_card_info tc on cl.card_id = tc.card_id")
   .append(" where tc.card_type <> 7 and cl.whether_effective")
   .append(" = 1) t order by t.card_in_no");// 黑名单表及挂失用户表中所有非管理员记录
  // 定义一个数组来接收黑用户中排序好的用户卡内码
  String arr2[][] = dbc.getArr(bf2.toString());
  upload_f(arr2, buserfile);
  // 得到黑用户bat文件的版本号, 初始值为1.0
  String huserSql = "select file_vesion from(select row_number() over(ORDER BY t.file_vesion DESC) num,"
   + "t.file_vesion from lc_t_upgrade_file t where t.file_type=4) where num=1";
  String vesion3 = dbc.getList0(huserSql);
  double ves = 1.0;// 定义黑用户版本编号变量,初始值为1.0
  /*
  * 数据库中存在旧版本则在版本增加0.1
  */
  if (StringUtil.isNotNull(vesion3)) {
  ves = (Double.parseDouble(vesion3) + 0.1);
  }
  vesion3 = df.format(ves);
  // 版本记录sql语句
  String husersql = "insert into lc_t_upgrade_file values(" + fileID
   + ",'" + buserfile + "','" + vesion3 + "','4',sysdate,"
   + UserID + ")";
  dbc.insertDB(husersql);// 持久化到数据库
 }
 }
 /**
 *
 * 方法名称:writeLong 方法描述:向输出流中写长整型
 *
 * @param input
 * @return byte[] version 1.0 author wuxq Sep 28, 2011 10:54:58 AM
 */
 public static byte[] writeLong(long input) {
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 DataOutputStream os = new DataOutputStream(baos);
 try {
  os.writeLong(Long.reverseBytes(input));
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 byte[] b = baos.toByteArray();
 return b;
 }
 /**
 *
 * 方法名称:upload_f 方法描述:把文件上传到ftp服务器
 *
 * @param arr
 * @param file
 *      void version 1.0 author wuxq Oct 8, 2011 11:37:27 AM
 */
 public static void upload_f(String[][] arr, String file) {
 byte by[] = null;
 byte[] result = new byte[1];
 if (StringUtil.isNotNull(arr)) {
  result = new byte[arr.length * 4];
  int position = 0;
  for (int i = 0; i < arr.length; i++) {
  by = writeLong(Long.parseLong(arr[i][0]));
  byte list[] = new byte[4];
  for (int h = 0; h < list.length; h++) {
   list[h] = by[h];
  }
  for (int g = position; g < position + 4; g++) {
   result[g] = list[g - 4 * i];
  }
  position = position + 4;
  }
 }
 boolean bool = FileUtil.creatWhiteManageFile(result, file);// 创建一个bat文件
 if (bool) {
  // InputStreamReader isr = new InputStreamReader(new
  // FileInputStream(file));
  InputStream inp = null;
  InputStream inp2 = null;
  try {
  inp = new BufferedInputStream(new FileInputStream(file));
  inp2 = new BufferedInputStream(new FileInputStream(file));
  } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  // 截取文件名
  String f = file.substring(10, file.length());
  // 获取ftp配置信息
  SysConstats sc = new SysConstats();
  FileUtil.uploadFileFtp(sc.FTPSERVER, sc.FTPUSERNAME,
   sc.FTPPASSWORD, sc.ENVELOPERESULTROOT, f, inp, inp2);
 }
 }
}
 

希望本文所述对大家java程序设计有所帮助。