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

时间:2016-11-18 17:15:03

标签: java file file-copying

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

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查看器
  4. 请帮助我厌倦了谷歌搜索2周半。谢谢大家

1 个答案:

答案 0 :(得分:0)

以下是您可以做什么,您想要什么的示例:

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

根据评论中的要求添加:

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

编辑过的课程:

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