Java 使用Jsch将带有目录的文件传输到SFTP服务器

Java 使用Jsch将带有目录的文件传输到SFTP服务器,java,io,jsch,Java,Io,Jsch,我正在尝试将文件从本地计算机移动到远程服务器。但是我不能用JSCHAPI来实现它 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

我正在尝试将文件从本地计算机移动到远程服务器。但是我不能用JSCHAPI来实现它

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(文件夹);在JSch中[逐个创建文件夹]。

“在这里,我不知道如何将/Home更改为/ROOT文件路径名。而且我需要复制所有文件,而不使用sftpChannel.mkdir(文件夹);[逐个创建文件夹]。-我不清楚这一点。您不想在代码中使用mkdir并且目录已经存在?PFB示例代码。您可以在执行代码之前在服务器中创建根目录。这将循环本地目录中的文件并将其传输到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...");
    }
}
“在这里,我不知道如何将/Home更改为/ROOT文件路径名。我还需要复制所有文件,而不使用JSch中的sftpChannel.mkdir(folder);[create folder one by one by one]。您不想在代码中使用mkdir并且目录已经存在?PFB示例代码。您可以在执行代码之前在服务器中创建根目录。这将循环本地目录中的文件并将其传输到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...");
    }
}

如果要根据本地计算机中的目录名称在远程服务器中自动创建目录,请使用PFB示例代码。这将递归检查本地目录C:\user\Home中的所有文件,并将它们以相同的文件夹结构移动到linux服务器中的/ROOT/目录。。(例如:如果folder1、folder2与C:\user\Home中的文件一起存在,则将在sftp服务器的/Root/目录中创建相同的文件夹名称)如果文件已存在于sftp服务器中,则这也将覆盖该文件

public static void main (String args[]) throws FileNotFoundException, IOException, ParseException
{
    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();
         channelSftp = (ChannelSftp) channel;
        System.out.println("sftp channel opened and connected.");
        sftpDirectory = "/ROOT/";
        NewDir=sftpDirectory;
        listf("C:\\user\\Home");
    }
    catch (Exception e) {
        e.printStackTrace();
    } finally {
        System.out.println("Transfer Process Completed...");
    }
public static List<File> listf(String directoryName) throws JSchException, SftpException {
    File directory = new File(directoryName);
    List<File> resultList = new ArrayList<File>();
    File[] fList = directory.listFiles();
    resultList.addAll(Arrays.asList(fList));
    for (File file : fList) {
        if (file.isFile()) {
            String filename=file.getAbsolutePath();
            channelSftp.put(filename, NewDir, ChannelSftp.OVERWRITE);
            System.out.println(filename + " transferred to " + sftpDirectory );
        } else if (file.isDirectory()) {
            System.out.println(file.getAbsolutePath());
            NewDir = sftpDirectory+file.getName();
            channelSftp.mkdir(NewDir);
            System.out.println(NewDir + " Folder created ");
            resultList.addAll(listf(file.getAbsolutePath()));
        }
    }
    System.out.println(fList);
    return resultList;
} 
publicstaticvoidmain(字符串args[])抛出FileNotFoundException、IOException、ParseException
{
试一试{
JSch JSch=新的JSch();
Session Session=jsch.getSession(“sftpuser”、“sftpost”);
session.setPassword(“sftpassword”);
java.util.Properties config=new java.util.Properties();
配置放置(“检查”、“否”);
config.put(“PreferredAuthentications”,
“公钥、键盘交互、密码”);
session.setConfig(config);
session.connect();
Channel=session.openChannel(“sftp”);
channel.connect();
channelSftp=(channelSftp)信道;
System.out.println(“sftp通道已打开并连接”);
sftpDirectory=“/ROOT/”;
NewDir=sftpDirectory;
列表(“C:\\user\\Home”);
}
捕获(例外e){
e、 printStackTrace();
}最后{
System.out.println(“传输过程已完成…”);
}
公共静态列表listf(stringdirectoryname)抛出JSchException、SftpException{
文件目录=新文件(目录名);
List resultList=new ArrayList();
File[]fList=directory.listFiles();
addAll(Arrays.asList(fList));
for(文件:fList){
if(file.isFile()){
字符串文件名=file.getAbsolutePath();
channelSftp.put(文件名,NewDir,channelSftp.OVERWRITE);
System.out.println(文件名+“转移到”+sftpDirectory);
}else if(file.isDirectory()){
System.out.println(file.getAbsolutePath());
NewDir=sftpDirectory+file.getName();
channelSftp.mkdir(NewDir);
System.out.println(NewDir+“已创建文件夹”);
addAll(listf(file.getAbsolutePath());
}
}
System.out.println(fList);
返回结果列表;
} 

如果要根据本地计算机中的目录名在远程服务器中自动创建目录,请使用PFB示例代码。这将递归检查本地目录C:\user\Home中的所有文件,并将它们以相同的文件夹结构移动到linux服务器中的/ROOT/目录中。。(例如:如果folder1、folder2与C:\user\Home中的文件一起存在,则将在sftp服务器的/Root/目录中创建相同的文件夹名称)如果文件已存在于sftp服务器中,则这也将覆盖该文件

public static void main (String args[]) throws FileNotFoundException, IOException, ParseException
{
    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();
         channelSftp = (ChannelSftp) channel;
        System.out.println("sftp channel opened and connected.");
        sftpDirectory = "/ROOT/";
        NewDir=sftpDirectory;
        listf("C:\\user\\Home");
    }
    catch (Exception e) {
        e.printStackTrace();
    } finally {
        System.out.println("Transfer Process Completed...");
    }
public static List<File> listf(String directoryName) throws JSchException, SftpException {
    File directory = new File(directoryName);
    List<File> resultList = new ArrayList<File>();
    File[] fList = directory.listFiles();
    resultList.addAll(Arrays.asList(fList));
    for (File file : fList) {
        if (file.isFile()) {
            String filename=file.getAbsolutePath();
            channelSftp.put(filename, NewDir, ChannelSftp.OVERWRITE);
            System.out.println(filename + " transferred to " + sftpDirectory );
        } else if (file.isDirectory()) {
            System.out.println(file.getAbsolutePath());
            NewDir = sftpDirectory+file.getName();
            channelSftp.mkdir(NewDir);
            System.out.println(NewDir + " Folder created ");
            resultList.addAll(listf(file.getAbsolutePath()));
        }
    }
    System.out.println(fList);
    return resultList;
} 
publicstaticvoidmain(字符串args[])抛出FileNotFoundException、IOException、ParseException
{
试一试{
JSch JSch=新的JSch();
Session Session=jsch.getSession(“sftpuser”、“sftpost”);
session.setPassword(“sftpassword”);
java.util.Properties config=new java.util.Properties();
配置放置(“检查”、“否”);
config.put(“PreferredAuthentications”,
“公钥、键盘交互、密码”);
session.setConfig(config);
session.connect();
Channel=session.openChannel(“sftp”);
channel.connect();
channelSftp=(channelSftp)信道;
System.out.println(“sftp通道已打开并连接”);
sftpDirectory=“/ROOT/”;
NewDir=sftpDirectory;
列表(“C:\\user\\Home”);
}
捕获(例外e){
e、 printStackTrace();
}最后{
System.out.println(“传输过程已完成…”);
}
公共静态列表listf(stringdirectoryname)抛出JSchException、SftpException{
文件目录=新文件(目录名);
List resultList=new ArrayList();
File[]fList=directory.listFiles();
addAll(Arrays.asList(fList));
for(文件:fList){
if(file.isFile()){
字符串文件名=file.getAbsolutePath();
channelSftp.put(文件名,NewDir,channelSftp.OVERWRITE);
System.out.println(文件名+“转移到”+sftpDirectory);
}else if(file.isDirec
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
channelExec.setCommand("unzip /ROOT/File.zip");
channelExec.setCommand("rm /ROOT/File.zip");