使用swing JFileChooser

时间:2016-10-26 13:55:43

标签: java swing copy jfilechooser file-copying

您好我正在尝试创建一个将某个文件复制到某个位置的简单应用程序。

我首先选择了两个JFileChoosers,选择要复制的文件,选择要复制文件的目的地的第二个。现在我不知道如何选择文件到选定的位置。这是迄今为止的代码。

public class MainFrame extends JFrame
{
private JButton btnSelectFile = new JButton("Select File"); // Kada se pritisne selectFile dugme, otvori se fileChooser.
private JLabel lbSelectFile = new JLabel("waiting"); // Ispisuje putanju do fajla koji zelimo da kopiramo.
private JButton btnWhereToCopy = new JButton("Where to copy"); // Kada pritisnemo dugme izadje file chooser da izaberemo gde zelimo da kopiramo file
private JLabel lbWhereToCopy = new JLabel("waiting"); // Stoji putanja gde zelimo da kopiramo file
private JButton btnCopyFiles = new JButton("Copy Files"); // Dugme kada se pritisne kopira fajlove
private JLabel lbIsCopied = new JLabel("waiting"); // Ako se fajl uspesno kopirao ispise se na ovoj labeli, a ako nije ispise se error.

private JPanel panel = new JPanel(); // Drzacemo pointer koji fajl zelimo da otvorimo.

private File selectedFile = null;
private File whereToCopy = null;

private ActionListener selectFile = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent arg0)
    {
        JFileChooser fc = new JFileChooser(); // Otvorimo file chooser.

        // showOpenDialog vraca int. Moguce su opcije, CANCEL,APPROVE i ERROR. Mi moramo da proverimo koji se nama option desio od ova 3
        int returnValue = fc.showOpenDialog(null); 

        if(returnValue == JFileChooser.APPROVE_OPTION) // Proverimo da li imamo approve, da se file mogao lepo otvoriti, ako jeste radimo sa njim sta zelimo.
        {
            selectedFile = fc.getSelectedFile(); // Stavimo pointer na fajl koji smo izabrali
            lbSelectFile.setText(selectedFile.getAbsolutePath()); // Ispisemo u labelu putanju fajla, cisto da znate sta ste izabrali.
        }
    }
};

private ActionListener selectPath = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e)
    {
        JFileChooser fc = new JFileChooser(); // Otvaramo file chooser da izaberemo mesto gde zelimo da kopiramo file
        fc.setCurrentDirectory(new java.io.File("."));
        fc.setDialogTitle("Where to copy file");
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        fc.setAcceptAllFileFilterUsed(false);


        if(fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        {
            whereToCopy = fc.getSelectedFile();
            lbWhereToCopy.setText(whereToCopy.getAbsolutePath());
        }
        else
        {
            System.out.println("No selection");
        }
    }
};

private ActionListener copyFile = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(selectedFile == null || whereToCopy == null)
        {
            lbIsCopied.setText("You didnt select file path");
            return;
        }

        // HOW TO COPY THIS FILES NOW
};

public MainFrame()
{
    super();
    setSize(new Dimension(500, 400));
    setTitle("Copy Applicaton");

    // Centrira aplikaciju na centar ekrana
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    add(getPanel());
    pack();
}

private JPanel getPanel()
{
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // Y_AXIS, stavlja elemente po Y osi.
    panel.setPreferredSize(new Dimension(500, 400));


    btnSelectFile.addActionListener(selectFile); // Obradjuje dogadjaj dugmeta.
    btnWhereToCopy.addActionListener(selectPath); // Obradjuje dogadjaj dugmeta
    btnCopyFiles.addActionListener(copyFile); // Obradjuje dogadjaje

    // Dodajemo elemente na panel, bice nam poredjane u zavisnosti koji smo layout koristili, nas slusaj ja BoxLayout
    panel.add(btnSelectFile);
    panel.add(lbSelectFile);
    panel.add(btnWhereToCopy);
    panel.add(lbWhereToCopy);
    panel.add(btnCopyFiles);
    panel.add(lbIsCopied);
    return panel;
}

}

我有三个ActionListener,一个从JFileChooser获取文件,第二个获取我们想要复制文件的位置。我不知道如何制作第三个将复制文件的ActionListener。有什么帮助吗?

这是我到目前为止所做的,但我收到了错误。

        try {
            Files.copy(selectedFile.toPath(), whereToCopy.toPath(), StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            lbIsCopied.setText("Error");
            e1.printStackTrace();
            return;
        }

        lbIsCopied.setText("Did it");
    }

我总是得到错误。 AccessDeniedException错误。

1 个答案:

答案 0 :(得分:0)

尝试renameTo()方法

try{
    File orginalFile = new File("path original file");
    File newFilePath = new File("path to new directory");

    if (originalFile.renameTo(newFilePath + File.Seperator + originalFile.getName())){
        System.out.println(true);
    }else {
        System.out.println(false);
    }
} catch (Exception e){
    E.printStackTrace();
}