在Java中使用JSch在服务器上创建嵌套目录
我正在使用在Java中使用JSch在服务器上创建嵌套目录,java,jsch,mkdir,Java,Jsch,Mkdir,我正在使用jSch制作一个Java文件上传应用程序。我想把我的文件放在不同的目录根据他们的创建日期等 我有一个主目录“/var/local/recordingsbackup/”,我正在其中创建其他目录并将数据放入其中 为实现这一目标: 我必须创造一个直接的喜欢 “/var/local/recordingsbackup/20140207/root/SUCCESS/WN/”和put 里面有数据 到目前为止,我已经试过了: private void fileTransfer(ChannelSftp
jSch
制作一个Java文件上传应用程序。我想把我的文件放在不同的目录根据他们的创建日期等
我有一个主目录“/var/local/recordingsbackup/”
,我正在其中创建其他目录并将数据放入其中
为实现这一目标:
- 我必须创造一个直接的喜欢
和put 里面有数据“/var/local/recordingsbackup/20140207/root/SUCCESS/WN/”
private void fileTransfer(ChannelSftp channelTarget, temp_recording_log recObj, String filePath) {
int fileNameStartIndex = filePath.lastIndexOf("/") + 1;
String date = new SimpleDateFormat("yyyyMMdd").format(recObj.getCalldate());
String fileName = filePath.substring(fileNameStartIndex);
String staticPath = "/var/local/recordingsbackup/";
String completeBackupPath = staticPath + date + "/" + recObj.getUsername() + "/" + recObj.getStatus() + "/" + recObj.getDisposition() + "/";
try {
InputStream get = SourceChannel.get(filePath);
try {
channelTarget.put(get, completeBackupPath + fileName);
} catch (SftpException e) {
System.out.println("Creating Directory...");
channelTarget.mkdir(completeBackupPath); // error on this line
channelTarget.put(get, completeBackupPath + fileName);
}
} catch (SftpException e) {
log.error("Error Occured ======== File or Directory dosen't exists === " + filePath);
e.printStackTrace();
}
}
- 如果我正在创建单目录,如
,则不会发生错误,文件也会成功上载/var/local/recordingsbackup/
请在这方面帮助我…我如何创建这些嵌套目录???我认为在SFTP协议中您不可能想做什么。您必须依次创建每个子目录。我认为在SFTP协议中您不可能想做什么。您必须依次创建每个子目录。最后,我已经完成了 这就是我成功的原因:
try {
channelTarget.put(get, completeBackupPath + fileName);
} catch (SftpException e) {
System.out.println("Creating Directory...");
String[] complPath = completeBackupPath.split("/");
channelTarget.cd("/");
for (String dir : complPath) {
if (folder.length() > 0) {
try {
System.out.println("Current Dir : " + channelTarget.pwd());
channelTarget.cd(folder);
} catch (SftpException e2) {
channelTarget.mkdir(folder);
channelTarget.cd(folder);
}
}
}
channelTarget.cd("/");
System.out.println("Current Dir : " + channelTarget.pwd());
channelTarget.put(get, completeBackupPath + fileName);
}
终于,我做到了
这就是我成功的原因:
try {
channelTarget.put(get, completeBackupPath + fileName);
} catch (SftpException e) {
System.out.println("Creating Directory...");
String[] complPath = completeBackupPath.split("/");
channelTarget.cd("/");
for (String dir : complPath) {
if (folder.length() > 0) {
try {
System.out.println("Current Dir : " + channelTarget.pwd());
channelTarget.cd(folder);
} catch (SftpException e2) {
channelTarget.mkdir(folder);
channelTarget.cd(folder);
}
}
}
channelTarget.cd("/");
System.out.println("Current Dir : " + channelTarget.pwd());
channelTarget.put(get, completeBackupPath + fileName);
}
publicstaticvoidmkdirs(channelsftpch,字符串路径){
试一试{
String[]folders=path.split(“/”);
如果(文件夹[0].isEmpty())文件夹[0]=“/”;
字符串完整路径=文件夹[0];
对于(int i=1;i
我使用此实现创建嵌套文件夹
我尽量不使用异常。请记住,文件系统是基于linux的。
OP已经找到了一个解决方案,但我想附加它。
如果要创建的文件夹在“ls”结果中不存在,我只需执行mkdir操作。公共静态void mkdirs(ChannelSftp ch,字符串路径){
试一试{
String[]folders=path.split(“/”);
如果(文件夹[0].isEmpty())文件夹[0]=“/”;
字符串完整路径=文件夹[0];
对于(int i=1;i
我使用此实现创建嵌套文件夹
我尽量不使用异常。请记住,文件系统是基于linux的。
OP已经找到了一个解决方案,但我想附加它。
如果要创建的文件夹在“ls”结果中不存在,我只需执行mkdir操作。更正先前的脚本:
public static void mkdirs(ChannelSftp ch, String path) {
try {
String[] folders = path.split("/");
if (folders[0].isEmpty()) folders[0] = "/";
String fullPath = folders[0];
for (int i = 1; i < folders.length; i++) {
Vector ls = ch.ls(fullPath);
boolean isExist = false;
for (Object o : ls) {
if (o instanceof LsEntry) {
LsEntry e = (LsEntry) o;
if (e.getAttrs().isDir() && e.getFilename().equals(folders[i])) {
isExist = true;
}
}
}
if (!isExist && !folders[i].isEmpty()) {
// Add separator path
ch.mkdir(fullPath + "/" + folders[i]);
}
// Add separator path
fullPath = fullPath + "/" + folders[i] + "/";
}
} catch (Exception e) {
e.printStackTrace();
}
}
更正以前的脚本:
public static void mkdirs(ChannelSftp ch, String path) {
try {
String[] folders = path.split("/");
if (folders[0].isEmpty()) folders[0] = "/";
String fullPath = folders[0];
for (int i = 1; i < folders.length; i++) {
Vector ls = ch.ls(fullPath);
boolean isExist = false;
for (Object o : ls) {
if (o instanceof LsEntry) {
LsEntry e = (LsEntry) o;
if (e.getAttrs().isDir() && e.getFilename().equals(folders[i])) {
isExist = true;
}
}
}
if (!isExist && !folders[i].isEmpty()) {
// Add separator path
ch.mkdir(fullPath + "/" + folders[i]);
}
// Add separator path
fullPath = fullPath + "/" + folders[i] + "/";
}
} catch (Exception e) {
e.printStackTrace();
}
}
您可能想解释为什么您认为上一个(哪个?)开关需要修复为什么要使用
ls
检查文件夹是否存在?那太没效率了。使用stat
。您可能需要解释为什么您认为上一个(哪个?)开关需要修复为什么要使用ls
检查文件夹是否存在?那太没效率了。使用stat
。