我有一个要求,我需要下载某些。从FTP服务器压缩文件,并将存档的内容(内容是一些XML文件)推送到HDFS(Hadoop分布式文件系统)。因此,到目前为止,我正在使用acpache FTPClient连接到FTP服务器,并首先将文件下载到本地计算机。稍后将其解压缩,并给出一个方法的文件夹路径,该方法将迭代本地文件夹并将文件推送到HDFS。为了便于理解,我还在下面附加了一些代码片段。
//Gives me an active FTPClient
FTPClient ftpCilent = getActiveFTPConnection();
ftpCilent.changeWorkingDirectory(remoteDirectory);
FTPFile[] ftpFiles = ftpCilent.listFiles();
if(ftpFiles.length <= 0){
logger.info("Unable to find any files in given location!!");
return;
}
//Iterate files
for(FTPFile eachFTPFile : ftpFiles){
String ftpFileName = eachFTPFile.getName();
//Skips files if not .zip files
if(!ftpFileName.endsWith(".zip")){
continue;
}
System.out.println("Reading File -->" + ftpFileName);
/*
* location is the path on local system given by user
* usually loaded by a property file.
*
* Create a archiveLocation where archived files are
* downloaded from FTP.
*/
String archiveFileLocation = location + File.separator + ftpFileName;
String localDirName = ftpFileName.replaceAll(".zip", "");
/*
* localDirLocation is the location where a folder is created
* by the name of the archive in the FTP and the files are copied to
* respective folders.
*
*/
String localDirLocation = location + File.separator + localDirName;
File localDir = new File(localDirLocation);
localDir.mkdir();
File archiveFile = new File(archiveFileLocation);
FileOutputStream archiveFileOutputStream = new FileOutputStream(archiveFile);
ftpCilent.retrieveFile(ftpFileName, archiveFileOutputStream);
archiveFileOutputStream.close();
//Delete the archive file after coping it's contents
FileUtils.forceDeleteOnExit(archiveFile);
//Read the archive file from archiveFileLocation.
ZipFile zip = new ZipFile(archiveFileLocation);
Enumeration entries = zip.entries();
while(entries.hasMoreElements()){
ZipEntry entry = (ZipEntry)entries.nextElement();
if(entry.isDirectory()){
logger.info("Extracting directory " + entry.getName());
(new File(entry.getName())).mkdir();
continue;
}
logger.info("Extracting File: " + entry.getName());
IOUtils.copy(zip.getInputStream(entry), new FileOutputStream(
localDir.getAbsolutePath() + File.separator + entry.getName()));
}
zip.close();
/*
* Iterates the folder location provided and load the files to HDFS
*/
loadFilesToHDFS(localDirLocation);
}
disconnectFTP();
现在,这种方法的问题是,该应用程序需要花费大量时间将文件下载到本地路径,解压缩后再加载到HDFS。有没有更好的方法可以动态地从FTP提取Zip的内容,并将内容流直接提供给方法loadFilesToHDFS(),而不是本地系统的路径?
使用zip流。请参见此处:http://www.oracle.com/technetwork/articles/java/compress-1565076.html
具体请参见此处的代码示例1。
我有一个问题,连接两个不同的进程,我正在工作。我的任务是从数据库中提取数据,从数据中创建一个文件,然后将其上传到FTP服务器。 到目前为止,我已经使用以下代码创建并下载了文件,是包含完整文本文件的字符串: 当我只想在浏览器中运行脚本并下载文件,但我希望将其发送到FTP服务器时,这会起作用。 我知道我与FTP服务器的连接正常工作,并且我正确地导航到正确的目录,并且我已经从磁盘中提取了文件并使用将它们
问题内容: 我正在尝试创建一个简单的Java程序,该程序从zip文件中的文件读取和提取内容。压缩文件包含3个文件(txt,pdf,docx)。我需要阅读所有这些文件的内容,并且为此使用了Apache Tika。 有人可以帮我实现此功能。到目前为止,我已经尝试过了,但是没有成功 代码段 问题答案: 如果你想知道如何从每个文件中获取文件内容,ZipEntry那实际上很简单。这是一个示例代码: 一旦拥有
问题内容: 我有使用Spark生成的RDD。现在,如果我将此RDD写入csv文件,则可以使用“ saveAsTextFile()”之类的一些方法,该方法将csv文件输出到HDFS。 我想将文件写入本地文件系统,以便我的SSIS进程可以从系统中选择文件并将它们加载到DB中。 我目前无法使用sqoop。 除了编写Shell脚本之外,Java中是否还有其他地方可以做到这一点? 需要任何清晰度,请告知。
我必须构建一个简单的路由,用camel将文件从ftps服务器下载到我的文件系统,所以我要做以下操作: 在日志中,我没有看到任何错误,路由似乎已正确初始化(我确信文件就在那里:)): 这是我在filezilla上连接到ftps服务器的设置,它正在工作 如果我尝试连接到一个普通的ftp服务器,那么路由就会很好地工作。 有人帮忙吗?
我试图构建一个简单的路由,从FTP文件夹读取,并将其存储在本地资源文件夹中。我能够连接到FTPendpoint,但之后什么也不会发生。 要启动我的程序,我使用:mvn clean compile camel:run
问题内容: 我正在尝试使用Python 2.7.1(在Windows上,fyi)从zip文件中提取文件,而我的每一次尝试都显示了具有Modified Date =提取时间的提取文件(不正确)。 我也尝试使用.extractall方法,结果相同。 谁能告诉我我在做什么错? 我想认为这是可能的,而不必重新校正每个[Windows文件的文件创建日期?](http://codingdict.com/que