sftp jschファイル移動バックアップの考え方

6160 ワード

1.jsch jarパッケージはmv cpなどのモバイルレプリケーション機能をサポートしていません.考え方を変換し、sftpはファイルをローカルサーバにダウンロードし、ディレクトリは/年/月/日レベルの使用を考慮することができます.
2.その後、sftpのダウンロード操作が完了し、ファイル操作表を記録し、ダウンロード状態を記録する.
3.タイミングバックアップのタスクでは、ファイル操作テーブルのダウンロード状態に基づいて、ループ操作:まずローカルにファイルが存在するかどうかを確認し、存在する場合はsftp jsch rmでファイルを削除します.
4.最後に、ローカルのファイルをsftpサーバに一括アップロードし、バックアップを移行する必要がある新しいフォルダディレクトリに実装します.ディレクトリは、/年/月/日レベルの使用を考慮できます.
jschは、マルチレベルディレクトリを一度に作成することなく、mkdir 1つのディレクトリを一度にサポートします.必要なパス:
String[] folders = path.split( "/" );
for ( String folder : folders ) {
    if ( folder.length() > 0 ) {
        try {
            sftp.cd( folder );
        }
        catch ( SftpException e ) {
            sftp.mkdir( folder );
            sftp.cd( folder );
        }
    }
}

一括アップロード(キーコード)
private static ChannelSftp upload(String path, String dst, SftpProgressMonitor monitor) throws SftpException {
        File file = new File(path);
        if (!file.exists()) {
            return null;
        }
        ChannelSftp chSftp = null;
        try {
            chSftp = ChannelSftpSingleton.getInstance().getChannelSftp();
        } catch (JSchException e) {
            e.printStackTrace();
        }
        if (chSftp == null) {
            return null;
        }
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files == null || files.length <= 0) {
                return null;
            }
            for (File f : files) {
                String fp = f.getAbsolutePath();
                if (f.isDirectory()) {
                    String mkdir = dst + "/" + f.getName();
                    try {
                        chSftp.cd(mkdir);
                    } catch (Exception e) {
                        chSftp.mkdir(mkdir);
                    }
                    upload(fp, mkdir, monitor);
                } else {
                    chSftp.put(fp, dst, monitor, ChannelSftp.OVERWRITE);
                }
            }
        } else {
            String fp = file.getAbsolutePath();
            chSftp.put(fp, dst, monitor, ChannelSftp.OVERWRITE);
        }
        return chSftp;
    }

テストクラス
String src = " ";
        String dst = "sftp ";
        try {
            uploadFilesToServer(src, dst, new SftpProgressMonitor() {
                @Override
                public void init(int i, String src, String dst, long size) {
                    System.out.println("  " + src + "   " + dst + ", :" + (double) (size) + "b");
                }

                @Override
                public boolean count(long l) {
                    return true;
                }

                @Override
                public void end() {
                    System.out.println(" ");
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }

最後にjschの各種終了、各種閉鎖操作を処理する必要がある.