2014-02-07 2 views
0

Я делаю приложение для загрузки файлов на Java с использованием jSch. Я хочу разместить файл в разных каталогах на основе даты их создания и т. Д.Создание вложенных каталогов на сервере с использованием JSch в Java

У меня есть основной каталог "/var/local/recordingsbackup/", в котором я создаю другие каталоги и помещаю в них данные.

Для достижения этой цели:

  • Я должен создать Dir'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/ то ошибка не происходит и файлы успешно загружены.

Пожалуйста, помогите мне в этом ... как я могу создать эти вложенные каталоги ???

ответ

1

Наконец-то я это сделал.

Это, как я получил успех:

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); 
     } 
0

Я не думаю, что вы хотите сделать в SFTP-протоколе. Вам нужно будет создать каждый подкаталог по очереди.

0
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()) { 
       ch.mkdir(fullPath + folders[i]); 
      } 
      fullPath = fullPath + folders[i] + "/"; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Я использовал эту реализацию, чтобы создавать вложенные папки.

Я старался не использовать Исключение. Имейте в виду, что файловая система основана на Linux. OP уже нашел решение, но я хотел добавить к нему. Просто я делаю mkdir, если папка, которую я хотел создать, не существует в результате «ls».

Смежные вопросы