2016-10-26 19 views
0

Привет, я пытаюсь создать простую программу, которая скопирует некоторый файл в какое-то место.Копирование файла с 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.

+0

Вы пытаетесь переместить файл я из одного каталога в другой? – paul

+0

У вас есть разрешение на копирование файла в указанное место. Если вы работаете в Windows, попробуйте запустить приложение с правами администратора, jsut отметьте это один раз, чтобы исключить возможность. – Ironluca

+0

@paul Скопируйте его. Но я также хочу знать, как его переместить. –

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^