JSch将文件放入子目录中

时间:2018-04-30 20:36:20

标签: java sftp jsch

我正在尝试使用JSch将文件放入SFTP目录。

channelSftp.cd(destDir);
channelSftp.put(new FileInputStream(filePath), filePath.substring(filePath.lastIndexOf(File.separatorChar)));

但是上面的代码将文件始终放在SFTP用户主目录而不是destDir中。例如,如果我在用户主目录下创建子目录test并将destDir设置为channelSftp.getHome()+"test",则该文件仍然只是复制到用户主目录而不是测试子目录。 / p>

我尝试列出destDirtest子目录)中的文件,它显示test目录下的所有文件/目录。

Vector<com.jcraft.jsch.ChannelSftp.LsEntry> vv = channelSftp.ls(destDir);
if(vv != null) {
     for(int ii=0; ii<vv.size(); ii++){
         Object obj=vv.elementAt(ii);
         if(obj instanceof LsEntry){
             System.out.println(((LsEntry)obj).getLongname());
         }
     }
 }

有什么建议吗?我查看了权限(test子目录与SFTP用户主目录具有完全相同的权限。)

2 个答案:

答案 0 :(得分:1)

filePath.substring(filePath.lastIndexOf(File.separatorChar))结果甚至包括最后一个分隔符。

因此,如果您通过/home/user/file.txt,则会获得/file.txt。这是一个绝对路径,因此忽略任何工作目录,并且您实际上总是写入根文件夹。

您希望filePath.substring(filePath.lastIndexOf(File.separatorChar) + 1)仅获得file.txt

另见How do I get the file name from a String containing the Absolute file path?

答案 1 :(得分:0)

这很好用!!

       channel.connect();

       try {
          channel.mkdir("subdir");
       } catch (Exception e) {
          // ... do something if subdir already exists
       }

       // Then the trick !
       channel.put(inputStream, "subdir" + "/" + "filename.ext");