Привет, я пытаюсь создать простую программу, которая скопирует некоторый файл в какое-то место.Копирование файла с swing JFileChooser
Сначала я сделал два 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;
}
}
У меня есть три ActionListeners, один из которых получает файл из 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.
Вы пытаетесь переместить файл я из одного каталога в другой? – paul
У вас есть разрешение на копирование файла в указанное место. Если вы работаете в Windows, попробуйте запустить приложение с правами администратора, jsut отметьте это один раз, чтобы исключить возможность. – Ironluca
@paul Скопируйте его. Но я также хочу знать, как его переместить. –