我试图递归遍历登录FTP服务器后到达的整个根目录。
我能够连接,我真正想要做的就是遍历整个结构,然后下载每个文件和文件夹,并使其具有与FTP相同的结构。到目前为止,我所能提供的是一种有效的下载方法,它可以到达服务器并获取我的整个文件结构,这很不错,只是第一次尝试失败,然后第二次尝试成功。我得到的错误如下:
java.io.FileNotFoundException:输出目录\ test \ testFile.png(系统找不到指定的路径)
经过多次尝试,我确实需要在本地具有目录的上传功能,但无法完全正常工作,因此我确实需要一些帮助。
public static void download(String filename, String base)
{
File basedir = new File(base);
basedir.mkdirs();
try
{
FTPFile[] ftpFiles = ftpClient.listFiles();
for (FTPFile file : ftpFiles)
{
if (!file.getName().equals(".") && !file.getName().equals("..")) {
// If Dealing with a directory, change to it and call the function again
if (file.isDirectory())
{
// Change working Directory to this directory.
ftpClient.changeWorkingDirectory(file.getName());
// Recursive call to this method.
download(ftpClient.printWorkingDirectory(), base);
// Create the directory locally - in the right place
File newDir = new File (base + "/" + ftpClient.printWorkingDirectory());
newDir.mkdirs();
// Come back out to the parent level.
ftpClient.changeToParentDirectory();
}
else
{
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
String remoteFile1 = ftpClient.printWorkingDirectory() + "/" + file.getName();
File downloadFile1 = new File(base + "/" + ftpClient.printWorkingDirectory() + "/" + file.getName());
OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
outputStream1.close();
}
}
}
}
catch(IOException ex)
{
System.out.println(ex);
}
}
您的问题(好吧,在我们摆脱.
和之后..
,您已经解决了二进制问题),这是您在调用之前执行递归步骤newDir.mkdirs()
。
所以假设你有一棵像
.
..
someDir
.
..
someFile.txt
someOtherDir
.
..
someOtherFile.png
您要做的是跳过点文件,看到它someDir
是目录,然后立即进入其中,跳过其点文件,然后查看someFile.txt
并处理它。您尚未在someDir
本地创建,因此会出现异常。
您的异常处理程序不会停止执行,因此控制权返回到递归的上层。此时,它将创建目录。
因此,下次运行程序时,本地someDir
目录已从上一次运行中创建,您不会发现任何问题。
基本上,您应该将代码更改为:
if (file.isDirectory())
{
// Change working Directory to this directory.
ftpClient.changeWorkingDirectory(file.getName());
// Create the directory locally - in the right place
File newDir = new File (base + "/" + ftpClient.printWorkingDirectory());
newDir.mkdirs();
// Recursive call to this method.
download(ftpClient.printWorkingDirectory(), base);
// Come back out to the parent level.
ftpClient.changeToParentDirectory();
}
我试图递归地遍历登录到FTP服务器后到达的整个根目录。 我能够连接,我真正想做的就是递归整个结构,下载每个文件和文件夹,并使其与FTP上的结构相同。到目前为止,我拥有的是一种有效的下载方法,它进入服务器并获取我的整个文件结构,这非常棒,只是第一次尝试失败,然后第二次成功。我得到的错误如下: java.io.FileNotFoundException: outout-目录\test\testFile
问题内容: 我正在尝试使用来下载项目的文件,因为该项目的SVN服务器不再运行,并且只能通过浏览器访问文件。所有文件的基本URL都一样 http://abc.tamu.edu/projects/tzivi/repository/revisions/2/raw/tzivi/ * 如何使用(或任何其他类似工具)下载此存储库中的所有文件,其中“ tzivi”文件夹是根文件夹,并且在其下有几个文件和子文件夹
我正在尝试创建一个列表,列出在FTP服务器上的文件夹中找到的所有文件名。完整目录与登录凭据一起保存在设置数据库表中。它连接到FTP区域很好,我可以上传/下载文件。 这是我从文件夹中获取文件的代码。 我遇到的问题是,当前我试图搜索的文件夹是空的,但它找到了2个文件。 为什么会这样? 中的值是 这是我在FileZilla中打开它时的文件夹-它肯定是一个空文件夹。 如何查看系统文件中的所有文件并将其放入
我有一个谷歌云存储桶,我可以使用python中的函数下载对象,我也可以使用或函数下载整个目录。 有没有一种方法可以使用python作为单个zip文件从存储桶下载整个目录。 这样做Python——从谷歌云存储下载整个目录需要我逐个文件下载。 有没有办法一次下载整个目录?
本文向大家介绍python ftp 按目录结构上传下载的实现代码,包括了python ftp 按目录结构上传下载的实现代码的使用技巧和注意事项,需要的朋友参考一下 具体代码如下所示: 只完成了按目录结构上传,下载还没弄好。 补充:下面看下Python ftp 上传和下载 工具 python3 ftplib 上传 下载 总结 以上所述是小编给大家介绍的jpython ftp 按目录结构上传下载的实现
问题内容: 我需要从FTP读取CSV文件头。 由于这些文件可能非常庞大,因此我不需要下载它们。 有没有办法从FTP读取CSV文件的第一行并中止连接? 问题答案: 只需阅读第一行,忽略剩余内容并关闭流。智能FTP客户端不会在提供任何内容供读取之前将 整个 流缓冲在内存中。 假设您使用的是Apache Commons Net FTPClient: