JAVA 将 .JPG 和 .PDF 文件移动到特定位置

JAVA Move .JPG and .PDF Files to Specific Location

我想将 .pdf 个文件和 .jpg 个文件移动到特定文件夹,然后将特定位置路径保存到数据库。到目前为止,在 google 的帮助下,我可以将文件复制到新位置(不移动)并将新路径保存到数据库,如下面的代码集所示。

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. 如何检索那些图像 link 以直接打开(如 'click 这里打开report') 它应该在电脑默认打开 图片查看器或 PDF 查看器

请帮助我厌倦了 2 个半星期的谷歌搜索。谢谢大家

这里有一个例子,你可以怎么做,你想要什么:

  • choose() 限于 PDF 和 JPG
  • move() 文件到目的地
  • 使用默认程序打开()

根据您评论中的要求添加:

  • getFileExtension() 获取最后一个点后的字符串
  • 从今天的时间戳 + 索引 + 扩展生成 DestinationPath()

已编辑class:

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