这里有新鲜出炉的Java函数式编程,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了java实现将文件上传到ftp服务器的方法,结合实例形式分析了基于java实现的ftp文件传输类定义与使用方法,需要的朋友可以参考下
本文实例讲述了java实现将文件上传到ftp服务器的方法。分享给大家供大家参考,具体如下:
工具类:
- 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;
- }
- }
读取配置文件:
- 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:
- 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程序设计有所帮助。
来源: http://www.phperz.com/article/17/1111/360165.html