2016-11-18 4 views
0

Ich möchte .pdf Dateien und .jpg Dateien in bestimmten Ordner verschieben und danach den bestimmten Speicherort Pfad zur Datenbank speichern. Bisher konnte ich mit Hilfe von Google die Datei an einen neuen Speicherort kopieren (nicht verschieben) und den neuen Pfad zur Datenbank speichern, wie auf den folgenden Code-Sets zu sehen ist.JAVA Move. JPG und. PDF-Dateien an bestimmten Speicherort

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

Was ich wissen will, ist

  1. Wie die Dateien mit einem eindeutigen Namen anstelle des Kopierens bewegen ..?
  2. Wie zeigt man eine Meldung an, ob diese Datei erfolgreich verschoben wurde oder nicht in JOptionpane (denn dann kann ich nur einfügen Teil) ..?
  3. Wie abzurufen diese Bilder eine direkte Verknüpfung zu öffnen (wie 'klicken hier zu öffnen berichten ‚) und es sollte in Computer-Standard Bildbetrachter oder PDF-Viewer

Bitte helfen ich offen‘ Ich bin es leid, zweieinhalb Wochen zu googeln. Dank Ihnen allen

Antwort

0

Hier ist ein Beispiel, wie Sie tun können, was Sie wollen:

  • () beschränkt wählen mit PDF und JPG
  • move() Datei zum Ziel
  • open() das Standardprogramm

hinzugefügt nach der Anforderung in Ihrem Kommentar:

  • getFileExtension() erhalten den String nach dem letzten Punkt
  • generateDestinationPath() von Zeitstempel der heutigen + Index + Erweiterung

Die bearbeitete Klasse:

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

, wie ihm einen eindeutigen Namen geben .. ? (wie img2016-09-13-55.jpg und img2016-11-19-20-22.pdf) ...? weil der Benutzer nicht umbenennen muss, wenn er das Dokument hochlädt. Wenn der Operator nicht ohne den eindeutigen Namen hochlädt, würde er/sie wahrscheinlich das bereits in der Datenbank vorhandene Dokument ersetzen – Henry

+0

Ihre Aufzeichnung für die Verschiebung der Datei wurde nicht ausgeführt, dann habe ich die Funktion 'StandardCopyOption.ATOMIC_MOVE' entfernt. Danach hat es funktioniert. Warum passiert es so? ohne es zu entfernen, erhalte ich einen Fehler sagt 'java.nio.file.AtomicMoveNotSupportedException:' – Henry

+0

@Henry ich fügte neue Methode für Dateinamensgenerierung in der Antwort hinzu. –

Verwandte Themen