在JSCH中创建新目录之前,如何检查目录

SRy*_*SRy 8 java directory jsch

如何在使用JSCH SFTP API创建新目录之前检查目录是否存在?我正在尝试使用,lstat但不确定它是否正在完成我需要的工作.谢谢你提前

abi*_*964 13

这是我在JSch中检查目录存在的方式.

如果dir存在,则创建目录

ChannelSftp channelSftp = (ChannelSftp)channel;
String currentDirectory=channelSftp.pwd();
String dir="abc";
SftpATTRS attrs=null;
try {
    attrs = channelSftp.stat(currentDirectory+"/"+dir);
} catch (Exception e) {
    System.out.println(currentDirectory+"/"+dir+" not found");
}

if (attrs != null) {
    System.out.println("Directory exists IsDir="+attrs.isDir());
} else {
    System.out.println("Creating dir "+dir);
    channelSftp.mkdir(dir);
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为异常是急切的,它可以更具体:`try{` ` channel.stat(folderName);` `}` `catch (SftpException e ){` ` if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE ){ ` ` channel.mkdir(folderName);` ` }` ` else {` ` throw e;` ` }` `}` (3认同)

use*_*421 10

在这种情况下,最好只创建并处理错误.这样操作就是原子操作,而在SSH的情况下,你也节省了大量的网络流量.如果您先进行测试,则会出现一个时间窗口,在此期间情况可能会发生变化,您无论如何都必须处理错误结果.