设为首页 收藏本站
查看: 1521|回复: 0

[经验分享] java 读取Ftp指定位置的文件解析并入库

[复制链接]

尚未签到

发表于 2016-6-10 09:25:57 | 显示全部楼层 |阅读模式
package com.longtop.ecommerce.service.dept;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.SocketException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import com.longtop.ecommerce.bo.Organization;
/**
* 从FTP读取文件
* @author tony
*
*/
public class FtpUtils {

private FTPClient ftpClient;
private String fileName, strencoding;
private int columns, rowCount;
private String ip = "65.0.15.26"; //服务器IP地址
private String userName = "anonymous"; //用户名
private String userPwd = "anonymous"; //密码
private int port = 21; //端口号
private String path = "/aaa/CIC_Department/"; //读取文件的存放目录
/**
* init ftp servere
*/
public FtpUtils() {
this.reSet();
}
public void reSet(){
//以当前系统时间拼接文件名
fileName = "t_department_"+getFileName()+".txt";
columns = 0;
rowCount = 0;
strencoding = "GBK";
this.connectServer(ip, port, userName, userPwd, path);
}
/**
* 以当前系统时间生成文件名
* @return
*/
private String getFileName(){
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMdd");
String str = "";
try {
str = sdFormat.format(new Date());
}
catch(Exception e) {
return "";
}
if (str.equals("1900-01-01")) {
str = "";
}
return str;
}

/**
* @param ip
* @param port
* @param userName
* @param userPwd
* @param path
* @throws SocketException
* @throws IOException
* function:连接到服务器
*/
public void connectServer(String ip , int port , String userName , String userPwd , String path){
ftpClient = new FTPClient();
try {
// 连接
ftpClient.connect(ip, port);
// 登录
ftpClient.login(userName, userPwd);
if(path != null && path.length() > 0){
// 跳转到指定目录
ftpClient.changeWorkingDirectory(path);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @throws IOException
* function:关闭连接
*/
public void closeServer(){
if(ftpClient.isConnected()){
try {
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* @param path
* @return
* function:读取指定目录下的文件名
* @throws IOException
*/
public List<String> getFileList(String path){
List<String> fileLists = new ArrayList<String>();
// 获得指定目录下所有文件名
FTPFile[] ftpFiles = null;
try {
ftpFiles = ftpClient.listFiles(path);
} catch (IOException e) {
e.printStackTrace();
}
for(int i = 0 ; ftpFiles != null && i < ftpFiles.length ; i++){
FTPFile file = ftpFiles;
if(file.isFile()){
fileLists.add(file.getName());
}
}
return fileLists;
}
/**
* @param fileName
* @param sourceFile
* @return
* @throws IOException
* function:下载文件
*/
public boolean unloadFile(String fileName , String sourceFile){
boolean flag = false;
try{
FileOutputStream fos = new FileOutputStream(fileName);
flag = ftpClient.retrieveFile(sourceFile, fos);
fos.flush();
fos.close();
}catch(Exception e){
flag = false;
e.printStackTrace();
}
return flag;
}
/**
* 返回一个文件流
* @param fileName
* @return
*/
public String readFile(String fileName){
String result = "";
InputStream ins = null;
try {
ins = ftpClient.retrieveFileStream(fileName);
// byte []b = new byte[ins.available()];
// ins.read(b);
BufferedReader reader=new BufferedReader(new InputStreamReader(ins));
String inLine = reader.readLine();
while (inLine != null) {
result += (inLine + System.getProperty("line.separator"));
inLine = reader.readLine();
}
reader.close();
if(ins != null){
ins.close();
}
// 主动调用一次getReply()把接下来的226消费掉. 这样做是可以解决这个返回null问题
ftpClient.getReply();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* @param fileName
* @return
* function:从服务器上读取指定的文件
* @throws ParseException
* @throws IOException
*/
public List readFile() throws ParseException{
List<Organization> contentList = new ArrayList<Organization>();
InputStream ins = null;
try {
//从服务器上读取指定的文件
ins = ftpClient.retrieveFileStream(fileName);
BufferedReader reader=new BufferedReader(new InputStreamReader(ins,strencoding));
String inLine = reader.readLine();
while (inLine != null) {
if (inLine.length() + 1 > columns)
columns = inLine.length() + 1;
String beanStr = inLine+System.getProperty("line.separator");
if(beanStr.indexOf(",")>0){
String[] beanStrs = beanStr.split(",");
Organization org = new Organization();
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
date = format1.parse(beanStrs[0].substring(1, beanStrs[0].length()-1));
org.setBuildDate(date);
String parentId = null;
if((beanStrs[1].substring(1, beanStrs[1].length()-1)).equals("")){
parentId = "00";//默认值,表示顶级机构
org.setOrgLevel("00");//机构级别为00
}else parentId = (beanStrs[1].substring(1, beanStrs[1].length()-1));
org.setParentId(parentId);//去掉引号
org.setOrgCode(beanStrs[2].substring(1, beanStrs[2].length()-1));
org.setOrgBrief(beanStrs[3].substring(1, beanStrs[3].length()-1));
if(beanStrs[4].length()>3){
org.setOrgName(beanStrs[4].substring(1, beanStrs[4].length()-3));
}
contentList.add(org);
}
inLine = reader.readLine();
rowCount++;
}
reader.close();
if(ins != null){
ins.close();
}
// 主动调用一次getReply()把接下来的226消费掉. 这样做是可以解决这个返回null问题
ftpClient.getReply();
System.out.println("此次任务一共读取["+contentList.size()+"]条数据记录");
} catch (IOException e) {
e.printStackTrace();
}
return contentList;
}
/**
* @param fileName
* function:删除文件
*/
public void deleteFile(String fileName){
try {
ftpClient.deleteFile(fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
FtpUtils ftp = new FtpUtils();
ftp.readFile();
/*ftp.unloadFile("D:\\test_t_department.txt", "t_department_20110623.txt");
List<String> files = ftp.getFileList(path);
for(int i = 0 ; i < files.size() ; i++){
String fileName = files.get(i);
ftp.unloadFile("D:\\test", "t_department_20110623.txt");
System.out.println(fileName);
String result = ftp.readFile("t_department_20110623.txt");
System.out.println(result);
ftp.deleteFile(fileName);
}*/
}
  声明:该文转载自:http://www.myexception.cn/web/737298.html,感谢共享者!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228497-1-1.html 上篇帖子: java中ftp断点上传功能的实现 下篇帖子: FTP 实现跨服务器文件上传下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表