我正在使用 jSch
在 Java 中制作文件上传应用程序。我想根据文件的创建日期等将文件放在不同的目录中。
我有一个主目录“/var/local/recordingsbackup/”
,我在其中创建其他目录并将数据放入其中。
要实现这一点:
- 我必须像这样创建 Di'y
“/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/
这样的单个目录,则不会发生错误并且文件已成功上传。
请帮助我...我怎样才能创建这些嵌套目录???
最佳答案
我终于做到了。
这就是我成功的方法:
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);
}
关于java - 在 Java 中使用 JSch 在服务器上创建嵌套目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57528086/