自学内容网 自学内容网

优化版,在另一个文件夹存文件

package CESHI1;
import org.apache.commons.io.FileUtils;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;


public class FileDialogTest1 {
    String sourceFilepath1;
    String getDirectory1;
    String getFile1;
    String getDirectory2;
    public FileDialogTest1(){
        JFrame frame = new JFrame("测试");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,800);
        frame.setLayout(null);

        JButton b1 = new JButton("选择文件");
        b1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                sourceFilepath1 = Option_Dialog(frame);
                getDirectory1 = getDirectory1();
                getFile1 = getFile1();

            }

        });

        JButton b2 = new JButton("选择保存文件的目录");
        b2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                getDirectory2 = Option_Dialog2(frame);

            }
        });

        JButton b3 = new JButton("保存文件");
        b3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                saveFile(getDirectory1,getFile1,getDirectory2);
            }
        });


        b1.setBounds(0,15,200,15);
        b2.setBounds(0,50,200,15);
        b3.setBounds(0,100,200,15);

        frame.add(b1);
        frame.add(b2);
        frame.add(b3);

        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

    private String Option_Dialog(JFrame frame){
        //FileDialog: 这是 Java AWT(Abstract Window Toolkit)中的一个类,用于显示文件选择对话框,允许用户选择文件或目录
        //FileDialog.LOAD: 这是一个常量,表示对话框的模式。FileDialog.LOAD 表示这是一个打开文件的对话框,用户可以选择一个文件进行加载。
        // 另一个常用的常量是 FileDialog.SAVE,它表示保存文件的对话框,用户可以选择一个位置来保存文件。
        FileDialog d1 = new FileDialog(frame,"选择文件",FileDialog.LOAD);
        //这行代码的作用是显示 FileDialog 对话框。
        // 具体来说,setVisible 方法用于控制组件的可见性。当传递 true 时,它会使对话框变为可见状态;传递 false 时,则会隐藏对话框。
        d1.setVisible(true);
        //d1.getDirectory(): 返回用户选择的文件所在的目录路径。这个路径是一个字符串,不包括文件名。
      //  d1.getFile(): 返回用户选择的文件名。如果用户没有选择任何文件,返回 null。
        getDirectory1 = d1.getDirectory();
        getFile1 = d1.getFile();
        String sourceFilePath1_1 = d1.getDirectory()+d1.getFile();
        return sourceFilePath1_1;
    }

    private String getDirectory1(){
        return getDirectory1;
    }
    private String getFile1(){
        return getFile1;
    }


    private String Option_Dialog2(JFrame frame) {
        // 这是 Java Swing 提供的一个类,用于让用户选择文件或目录。
        // 与 AWT 的 FileDialog 相比,JFileChooser 提供了更多的功能和更好的用户界面。
        //JFileChooser fileChooser = new JFileChooser(frame, "选择需要保存的文件夹",JFileChooser.DIRECTORIES_ONLY);
        JFileChooser fileChooser = new JFileChooser();
        //用于设置 JFileChooser 对话框的标题
        fileChooser.setDialogTitle("选择需要保存的文件夹");
        // 这行代码用于设置 JFileChooser 对话框,使其只能选择目录(文件夹)。
        // 这样,用户在打开的文件选择对话框中将只能选择文件夹,而不能选择单个文件。
        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        /***
         * int result = fileChooser.showOpenDialog(frame);
         * 这行代码用于显示文件选择对话框,并等待用户进行选择。showOpenDialog 方法会阻塞当前线程,
         * 直到用户关闭对话框(通过点击“打开”或“取消”按钮)。方法的返回值是一个整数,表示用户的操作结果。
         *
         * JFileChooser.APPROVE_OPTION (通常为 0): 表示用户选择了文件夹并点击了“打开”按钮。
         * JFileChooser.CANCEL_OPTION (通常为 1): 表示用户点击了“取消”按钮或关闭了对话框。
         * JFileChooser.ERROR_OPTION (通常为 -1): 表示发生了错误(例如,用户没有权限访问某个文件夹)。
         *
         */
        int result = fileChooser.showOpenDialog(frame);
        if (result == JFileChooser.APPROVE_OPTION) {
           // File selectedFolder = fileChooser.getSelectedFile();
            // 这行代码用于获取用户通过 JFileChooser 对话框选择的文件或文件夹。
            // getSelectedFile() 方法返回一个 File 对象,该对象表示用户选择的文件或文件夹。
            File selectedFolder = fileChooser.getSelectedFile();
            //File selectedFolder = fileChooser.getSelectedFile(); 这行代码用于获取用户通过 JFileChooser 对话框选择的文件或文件夹。
            // 具体来说,getSelectedFile() 方法返回一个 java.io.File 对象,该对象表示用户在对话框中选择的文件或文件夹。
            // 如果用户没有选择任何文件或文件夹(例如点击了“取消”按钮),则返回 null。
            getDirectory2 = selectedFolder.getAbsolutePath();
            return getDirectory2;
        }
        return null;
    }

    private void saveFile(String getDirectory1,String getFile1,String getDirectory2) {
        String sourceFilePath = getDirectory1 + getFile1;
        String destinationFilePath = getDirectory2 + "\\" + getFile1;
        File sourceFile = new File(sourceFilePath);
        File destinationFile = new File(destinationFilePath);
        /***
         * destinationFile: 这是一个 File 对象,代表目标文件。
         * getParentFile(): 这是 File 类的一个方法,它返回一个 File 对象,
         * 该对象表示当前 File 对象所代表的文件或目录的父目录。
         * 如果当前 File 对象已经是根目录,或者路径中没有父目录信息,则返回 null。
         *
         */
        File destinationDirectory = destinationFile.getParentFile();
        /***
         * destinationDirectory.exists() 是 Java 中 File 类的一个方法,
         * 用于检查由 File 对象表示的文件或目录是否存在。如果 destinationDirectory 存在,
         * 这个方法将返回 true;如果不存在,则返回 false。
         *
         */


        if (!destinationDirectory.exists()) {

            /**
             * mkdirs(): 这是 File 类的一个方法,它会尝试创建此抽象路径名指定的目录,
             * 包括所有必需但不存在的父目录。如果目录已经存在或成功创建,该方法返回 true;
             * 如果由于某些原因无法创建目录(例如权限问题),则返回 false。
             */

            boolean created = destinationDirectory.mkdirs();
            if (!created) {
                System.out.print("无法创建目标目录:" + destinationDirectory.getAbsolutePath());
                return;
            }
        }
        try {
            FileUtils.copyFile(sourceFile, destinationFile);
            System.out.print("文件已成功的复制到:" + destinationFilePath);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件复制失败:" + e.getMessage());
        }
    }
public static void main(String [] args){
        new FileDialogTest1();
}

    }

原文地址:https://blog.csdn.net/2302_76384361/article/details/143046424

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!