`

java 读取Ftp指定位置的文件解析并入库

    博客分类:
  • java
阅读更多
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[i];
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,感谢共享者!!

  • ftp.zip (366 KB)
  • 下载次数: 64
分享到:
评论

相关推荐

    完整实现ftp上传与下载并解析csv文件

    2. CSV文件解析: CSV(Comma Separated Values)文件是一种常见的数据交换格式,通常用于导入和导出表格数据。Java中,可以使用OpenCSV或者Apache Commons CSV库来解析CSV文件。解析过程通常包括打开文件、创建...

    java上传excel并且解析入库

    总结起来,Java实现“上传Excel并解析入库”涉及的关键技术包括文件上传(如Spring MVC的MultipartFile)、Excel解析(如Apache POI)以及数据库操作(JDBC或ORM)。通过熟练掌握这些技术,你可以构建出高效、稳定的...

    Java读取解析GRIB2文件

    下面将详细介绍如何使用Java进行GRIB2文件的读取和解析。 1. **理解GRIB2文件结构**: GRIB2文件由多个消息组成,每个消息包含一组相关的气象数据。消息由一个固定长度的头部(Header)和可变长度的数据部分(Data...

    JAVA解析DBC文件

    在JAVA中解析DBC文件,首先需要读取文件内容,然后按照DBC的语法规则进行解析。这通常涉及到字符串分割、正则表达式匹配等操作。解析过程中要注意处理大小端问题,因为在不同的硬件平台上,数据存储的顺序可能不同。...

    java 解析 chm 文件

    6. **文件I/O操作**:Java的`java.io`和`java.nio`包提供了读写文件的功能。在将CHM内容转换为HTML时,需要将生成的HTML文件写入磁盘。 7. **异常处理**:处理可能出现的错误和异常是任何程序设计的重要部分。在...

    ABAP从FTP下载文件并解析到内表移动文件位置.zip

    然后,将ZIP文件内容解析到内表,我们可以遍历`lt_files_info`,读取每个文件的内容,并将其转换为字符格式存储到内表中。例如: ```abap LOOP AT lt_files_info INTO DATA(ls_file_info). DATA(lv_file_content) ...

    java解析上传的shp文件,包含jar,方法,shp文件

    在Java编程环境中,解析Shapefile(.shp)文件是一项常见的任务,特别是在地理信息系统(GIS)应用中。Shapefile是一种广泛用于存储地理空间数据的开放格式。为了在Java中处理这些文件,我们可以利用开源库GeoTools...

    JavaFtp实例,实现文件下载和读取

    本实例主要探讨如何使用Java实现FTP文件下载以及读取文件内容。这个简单示例可以帮助初学者理解如何通过Java FTP客户端库与FTP服务器进行交互,进而完成实际的业务需求。 首先,我们需要导入Java FTP客户端库,通常...

    java中读取shp文件数据存入数据库

    shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形...该方法通过java代码实现将shp文件的数据读取以及存入数据库

    java读取解析图书MARC数据iso文件

    java读取解析图书MARC数据的iso文件

    java读取本地.db文件实例

    在Java编程中,读取本地SQLite数据库(.db文件)是一项常见的任务,特别是在移动应用开发或者需要离线存储数据的场景下。SQLite是一种轻量级的、开源的关系型数据库,它不需要单独的服务器进程,可以直接在应用程序...

    shp文件解析java实现

    本篇文章将详细讲解如何使用`meteoInfo`和`geotools`这两个Java库来解析`shp`文件,提取其中的数据,并获取边界线数据、中心点坐标以及最大和最小经纬度值。 `meteoInfo`是一个专门处理气象数据的Java库,虽然它的...

    java读取数据库表中内容转存sql文件,然后解析执行此文件

    在Java编程中,读取数据库表中的内容并将其转换为SQL文件,然后解析并执行这个文件,是一项常见的数据处理任务。这项操作可能涉及到数据库连接、数据查询、文件操作以及SQL语句的构建与执行。以下将详细介绍这个过程...

    java 解析 json文件 java 解析 json文件

    Java解析JSON文件是Java开发中常见的一项任务,特别是在与Web服务交互或处理API响应时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读及编写的特点,被广泛应用于网络数据传输...

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    Java读取多Word文档中指定位置的表格数据或文本内容

    Java读取Word文档中指定位置(可以自己自定义位置)的表格数据或文本内容 * @param filePath 文档路径 * @param start 指定位置开始读取表格数据的该位置上的字符串 * @param end 指定位置开始结束读取表格数据的该...

    hdf5文件结构以及基于java的读写

    ### HDF5 文件结构以及基于 Java 的读写 #### HDF 概述 HDF(Hierarchical Data Format)是一种自我描述、多对象的文件格式,专为高效地存储和分发科学数据而设计。它由美国国家超级计算应用中心(NCSA)开发,...

    java读取*.mdb文件数据

    在提供的"示例代码.txt"文件中,可能包含了一个使用UCanAccess进行分页读取的Java代码示例。这个示例可能包括了建立连接、设置分页参数、执行查询、处理结果集以及关闭资源的过程。打开这个文件,按照示例代码一步步...

    JAVA读取指定文件里面的指定内容

    本文将详细介绍如何使用Java读取指定文件内的特定内容,并深入解析代码中涉及的关键概念和技术要点。 #### 文件读取概述 在Java中,文件读取通常涉及到以下几个步骤: 1. **打开文件**:通过文件路径获取文件对象...

    java实现ftp自动上传文件

    首先,要实现FTP自动上传,我们需要了解和使用Java中的`java.net.Socket`类和`java.io`包来处理网络连接和文件读取。但是,为了简化开发流程和提高代码的可维护性,通常我们会选择使用第三方库,如Apache的commons-...

Global site tag (gtag.js) - Google Analytics