2016-11-18 4 views
0

Я хочу переместить .pdf файлы и .jpg файлы в определенную папку и после этого сохранить конкретный путь к базе данных. до сих пор с помощью google я мог копировать файл в новое место (не перемещаться) и сохранять новый путь к базе данных, как показано ниже в наборах кода.JAVA Move .JPG и .PDF Файлы для определенного местоположения

try { 
    JFileChooser choose = new JFileChooser(); 
    choose.showOpenDialog(null); 
    File f = choose.getSelectedFile(); 
    File sourceFile = new File(f.getAbsolutePath()); 
    File destinationFile = new File("D:\\" + sourceFile.getName()); 

    FileInputStream fileInputStream = new FileInputStream(sourceFile); 
    FileOutputStream fileOutputStream = new FileOutputStream(destinationFile); 

    int bufferSize; 
    byte[] bufffer = new byte[512]; 
    while ((bufferSize = fileInputStream.read(bufffer)) > 0) { 
     fileOutputStream.write(bufffer, 0, bufferSize); 
     } 

    fileInputStream.close(); 
    fileOutputStream.close(); 

} 
catch (Exception e){ 
    e.printStackTrace(); 
    } 

Что я хочу знать

  1. Как переместить файлы с уникальным именем вместо копирования ..?
  2. Как показать сообщение, успешно ли этот файл успешно перемещен или нет в JOptionpane (потому что тогда только я могу сделать вставку часть) ..?
  3. Как получить эти изображения ссылку, чтобы открыть непосредственно (например, 'нажмите здесь, чтобы открыть отчет »), и она должна быть открыта по умолчанию просмотра изображений или PDF зрителя компьютера

Пожалуйста, помогите я m устал от Googling в течение двух с половиной недель. спасибо вам всем

ответ

0

Вот пример того, как вы можете сделать, что вы хотите:

  • выбрать() ограничено PDF и JPG
  • движение (файл) в пункт назначения
  • открытым() с программа по умолчанию

Добавлен в соответствии запрос на комментарий:

  • getFileExtension() получить строку после последней точки
  • generateDestinationPath() с сегодняшнего меткой времени + индекс + расширение

Измененный класс:

package testingThings; 

    import java.awt.Desktop; 
    import java.io.IOException; 
    import java.nio.file.Files; 
    import java.nio.file.Path; 
    import java.nio.file.Paths; 
    import java.text.SimpleDateFormat; 
    import java.util.Arrays; 
    import java.util.Calendar; 
    import java.util.Date; 

    import javax.swing.JFileChooser; 
    import javax.swing.JOptionPane; 
    import javax.swing.filechooser.FileNameExtensionFilter; 

    public class FileHandler { 

     public Path choose() { 
      JFileChooser choose = new JFileChooser(); 
      choose.setFileFilter(new FileNameExtensionFilter("PDF and JPG", "pdf", "jpg")); 
      choose.showOpenDialog(null); 

      Path sourcePath = choose.getSelectedFile().toPath(); 

      return sourcePath; 
     } 

     public void move(Path sourcePath, Path destinationPath) { 
      try { 
       Files.move(
         sourcePath, 
         destinationPath//, 
         // since the destinationPath is unique, do not replace 
    //     StandardCopyOption.REPLACE_EXISTING, 
         // works for moving file on the same drive 
         //its basically a renaming of path 
    //     StandardCopyOption.ATOMIC_MOVE 
       ); 
    //   JOptionPane.showMessageDialog(null, "file " + sourcePath.getFileName() + " moved"); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       JOptionPane.showMessageDialog(
         null, 
         "moving failed for file: " + sourcePath.getFileName(), 
         "Error", 
         JOptionPane.ERROR_MESSAGE 
       ); 
       e.printStackTrace(); 
       System.exit(1); 
      } 
     } 

     public void open(Path destinationPath) { 
      try { 
       Desktop.getDesktop().open(destinationPath.toFile()); 
      } catch (IOException e1) { 
       JOptionPane.showMessageDialog(
         null, 
         "file openning fails: " + destinationPath.getFileName(), 
         "Error", 
         JOptionPane.ERROR_MESSAGE 
       ); 
       System.exit(1); 
      } 
     } 

     public static void main(String[] args) { 
      FileHandler fileHandler = new FileHandler(); 
      Path sourcePath = fileHandler.choose(); 

      String extension = fileHandler.getFileExtension(sourcePath); 
      Path destinationPath = fileHandler.generateDestinationPath(extension); 

      fileHandler.move(sourcePath, destinationPath); 
      fileHandler.open(destinationPath); 
     } 

     /** 
     * Generate a path for a file with given extension. 
     * The Path ist hardcoded to the folder "D:\\documents\\". The filename is the current date with appended index. For Example: 
     * <ul> 
     * <li>D:\\documents\\2016-11-19__12-13-43__0.pdf</li> 
     * <li>D:\\documents\\2016-11-19__12-13-43__1.pdf</li> 
     * <li>D:\\documents\\2016-11-19__12-13-45__0.jpg</li> 
     * </ul> 
     * @param extension 
     * @return 
     */ 
     public Path generateDestinationPath(String extension) { 
      Date today = Calendar.getInstance().getTime(); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd__HH-mm-ss"); 

      String filename; 
      Path destinationPath; 
      int index = 0; 

      do { 
       filename = sdf.format(today) + "__" + index + "." + extension; 
       destinationPath = Paths.get("D:\\documents\\" + filename); 
       destinationPath = Paths.get("C:\\Users\\ceo\\AppData\\Local\\Temp\\" + filename); 
       System.out.println(destinationPath); 
       index++; 
      } 
      while (destinationPath.toFile().exists()); 

      return destinationPath; 
     } 

     /** 
     * Return the String after the last dot 
     * @param path 
     * @return String 
     */ 
     public String getFileExtension(Path path) { 
      String[] parts = path.toString().split("\\."); 
      System.out.println(path); 
      System.out.println(Arrays.toString(parts)); 
      System.out.println(parts.length); 

      String extension = parts[parts.length - 1]; 
      return extension; 
     } 
    } 
+0

как дать ему уникальное имя .. ? (например img2016-09-13-55.jpg и img2016-11-19-20-22.pdf) ...? , поскольку оператор не должен переименовывать его при загрузке документа. если оператор не загрузил без уникального имени, он, вероятно, заменит документ уже в базе данных – Henry

+0

, ваша запись для движущегося файла не сработала, а затем я удалил функцию «StandardCopyOption.ATOMIC_MOVE». после этого он сработал. почему это происходит так ...? не удаляя его, я получаю сообщение об ошибке: 'java.nio.file.AtomicMoveNotSupportedException:' – Henry

+0

@Henry Я добавил новый метод генерации имени файла в ответ. –

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