如何使用Jsch递归FTP FTP目录结构?

时间:2018-02-14 14:22:05

标签: java ftp jsch

我试图遍历目录并上传相同结构中的所有内容和目录。

这是一个示例结构:

Dir1/
....Dir1_1/
....Dir1_2/
........Dir1_2_1/
............file.txt
Dir2/
....file.txt
....file2.txt
Dir3/
Dir4/
index.html
index.css
example.file

我尝试了以下内容:

private void ftpFiles(File[] files, ChannelSftp channelSftp) throws SftpException, FileNotFoundException {
    for (File file : files) {
        System.out.println("Uploading: " + file.getName());

        if (file.isDirectory()) {
            System.out.println(file.getName() + " is a directory");
            SftpATTRS attrs;
            try {
                channelSftp.stat(file.getName());
            } catch (Exception e) {
                System.out.println(file.getName() + " does not exist. Creating it...");
                channelSftp.mkdir(file.getName());
            } 
            channelSftp.cd(file.getName());

            this.ftpFiles(file.listFiles(), channelSftp);
        } else {
            channelSftp.put(new FileInputStream(file), file.getName());
        }
    }
}

我采用了一系列顶级文件,然后递归下去。

  

问题是,当我点击第一个目录并且cd进入它时,所有其他文件和目录都在其中。

示例: /Dir1/Dir1_1/Dir1_2/Dir1_2_1/Dir2/Dir3/Dir4/...etc

如何在递归调用此频道时使用我的频道../

1 个答案:

答案 0 :(得分:1)

也许像(伪代码):

List<Files> directories = new ArrayList<> ();
if (file is directory) directories.add(file);
else dowloadFile();

for (File f : directories) {
  cd(f);
  ftpFiles(listFiles());
  cd(..);
}