下载不在目标文件夹 Drive 中的文件

问题描述 投票:0回答:0

我正在从 SFTP 从两个不同的目录下载文件,稍后将上传

Google 云端硬盘中的文件夹。

    List<String> subDirs = Arrays.asList("Subdir1/fo1","Subdir2/fo2);
       for (String remoteSubDir : subDirs) {
            String remoteDir = sftpath + "/" + remoteSubDir;
            String localDir = localPath;
            sftpChannel.cd(remoteDir);
            Vector<ChannelSftp.LsEntry> files = sftpChannel.ls("*.pdf");
            for (ChannelSftp.LsEntry file : files) {
                
                if (!file.getAttrs().isDir()) {
                    String remoteFile = remoteDir + "/" + file.getFilename();
                    String localFile = localDir + "/" + file.getFilename();
                    String filename = file.getFilename();
                    System.out.println("\n"+ remoteFile);
                try {
                   sftpChannel.get(remoteFile, localFile);
                
                    System.out.println("Downloaded: " + filename);}
                }.catch (SftpException e) {
               e.printStackTrace();
                System.out.println(e.getMessage() + "Error ");
}}}

像这样运行它会从服务器下载所有文件,问题是我希望它只下载驱动器文件夹中还没有的文件。 为此,我创建了一个方法来检查文件是否在 Google Drive 文件夹中,并将其放入程序中:

try {
          boolean existFiles;
          existFiles = checkFilesDrive(drive, parentFolderId, file.getFilename()); //check the files in google drive
    
           if (!existFiles) {

        System.out.println("+ remoteFile);
        sftpChannel.get(remoteFile, localFile);

        System.out.println("Downloaded: " + filename);
    } 
   }catch (SftpException e) {
    e.printStackTrace();
    System.out.println(e.getMessage() + "Error ");
}

当我运行它时,它遍历所有文件,当它到达尚未在驱动器中的文件时,它会触发捕获并向我抛出错误:

Caused by: java.io.IOException: Pipe closed
at java.io.PipedInputStream.read(PipedInputStream.java:307)
at java.io.PipedInputStream.read(PipedInputStream.java:377)
at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2909)
at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2935)
at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2216)
... 5 more

丢失的文件不下载,一直遍历目录完成,没有切换到第二个目录。我只是得到一个错误。

我的代码有什么问题?与驱动器的连接是否正确,执行先检查驱动器文件夹的方法是否正确?它也不会切换到第二个目录。在添加检查驱动器文件夹的方法之前,一切都可以正常下载。

这就是我检查文件夹及其子文件夹中现有文件的方式:

FileList files = drive.files().list()
        .setQ("'" + folderId + "' in parents and trashed = false and (name = '" + fileName + "' or fullText contains '" + fileName + "')")
        .execute();
if (!files.getFiles().isEmpty()) {
    return true; 
}


String pageToken = null;
do {
    FileList subFolders = drive.files().list()
            .setQ("mimeType='application/vnd.google-apps.folder' and trashed = false and '" + folderId + "' in parents")
            .setSpaces("drive")
            .setFields("nextPageToken, files(id, name)")
            .setPageToken(pageToken)
            .execute();

    for (File subFolder : subFolders.getFiles()) {
        if (checkIfFileExistsInFolder(drive, subFolder.getId(), fileName)) {
             return true; 
        }
    }

    pageToken = subFolders.getNextPageToken();
} while (pageToken != null);

return false; 

}

java google-drive-api
© www.soinside.com 2019 - 2024. All rights reserved.