我正在尝试将文件从本地计算机移动到远程服务器。但我无法使用 JSch api 来做到这一点。
for (File f : fileList) {
channelSftp.put(new FileInputStream(f), "/ROOT/File/"+f.getName());
}
我正在循环本地计算机目录/Home/File/file1.txt、file2、txt file3.txt 等并将其保存到 fileList。
我需要将这些文件传输到SFTP服务器中的不同目录。 说/ROOT/File/file1.txt, file2,txt file3.txt。
我不知道如何将/Home 更改为/ROOT 文件路径名。而且我还需要复制所有文件而不使用 sftpChannel.mkdir(folder);在 JSch 中[一一创建文件夹]。
最佳答案
“这里我不知道如何将/Home 更改为/ROOT 文件路径名。而且我需要在 JSch 中复制所有文件而不使用 sftpChannel.mkdir(folder); [一一创建文件夹]。” - 我不太明白这一点。您不想在代码中使用 mkdir 并且目录已经存在? PFB 示例代码。您可以在执行代码之前在服务器中创建 ROOT 目录。这将循环本地目录中的文件并将它们传输到 SFTP 服务器..
public static void main (String args[]) throws FileNotFoundException, IOException
{
try {
JSch jsch = new JSch();
Session session = jsch.getSession("sftpuser", "sftphost");
session.setPassword("sftppassword");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications",
"publickey,keyboard-interactive,password");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
System.out.println("sftp channel opened and connected.");
ChannelSftp channelSftp = (ChannelSftp) channel;
String sftpDirectory = "/target/Rootlocation";
File directory = new File("C:\\Windows\\HomeLocation");
File[] fList = directory.listFiles();
for (File file : fList){
if (file.isFile()){
String filename=file.getAbsolutePath();
channelSftp.put(filename, sftpDirectory, ChannelSftp.OVERWRITE);
System.out.println(filename + " transferred to " + sftpDirectory );
}
}
}
catch (JSchException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Transfer Process Completed...");
}
}
关于java - 使用 Jsch 将带有目录的文件传输到 SFTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45018324/