[JFileChooser] Copiar arquivos de uma pasta

Queria saber se é possível copiar arquivos de uma pasta e colar na pasta que o usuário especificar através do JFileChooser? Até agora consegui mostrar os arquivos no que tem que salvar no seletor, porém não sei copiá-los na pasta que o usuário quer. Alguma ideia?

Meu código até agora:

   JFileChooser fc = new JFileChooser();
        fc.setDialogTitle("Salvar Arquivos");
        fc.setDialogType(JFileChooser.SAVE_DIALOG);
        fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        File diretorio = new File("\\CaptureTmp/Temp/");
        File[] arquivos = diretorio.listFiles();
        fc.setSelectedFiles(arquivos);    
        int arq = fc.showSaveDialog(this);
        if (arq == JFileChooser.APPROVE_OPTION) {
       
            
           
        } else {
            repaint();
        }

Seria interessante mesmo saber disso, estou com a mesma necessidade.
Queria poder copiar os arquivos selecionados e mover para outra pasta pelo JFileChooser.

Caso não seja possível, talvez dê para utilizar uma classe de manipulação de arquivos, pegar o caminho desses múltiplos arquivos que foram selecionados (também não sei como… se for apenas um arquivo, basta dar um get.SelectedFile.getPath() que consegue pegar o caminho… mas com o getSelectedFiles não é possível usar o getPath()), jogar numa lista e depois fazer a cópia dos arquivos por meio dessa classe.

bom se não tem como pegar todos os arquivos dessa maneira , por que não tenta toda vez que for selecionado 1 arquivo jogar dentro de 1 array? E depois percorre esse array e vai jogando em outro destino :thumbup:

Pois é justamente isso que não quero fazer. Por isso quero saber se há algum método nessas classes que consiga fazer isso…

então cara, mas o getSelectedFiles() retorna uma lista. No caso você poderia pegar essa lista e jogar no destino que você precisa. Eu não entendi porque você quer pegar o caminho dos arquivos selecionados, no caso para que ele serviria se pelo que eu entendo você só precisa dos arquivos para jogar em outro destino.

http://codingjunkie.net/java-7-copy-move/

Show de bola esse link Vinicius, vou tentar implementar meu código com esses métodos e depois volto para dar um feedback. :smiley:

Mais informações sobre “Path Operations”: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

Consegui resolver aqui. Joguei os arquivos selecionados numa lista de arquivos, depois utilizei a IOUtils pra copiar! :smiley:

    	File[] listFiles =  chooser.getSelectedFiles();

                  for(int i=0; i < listFiles.length; i++){            		                          
         		FileInputStream origem = new FileInputStream(listFiles[i].getPath());
           		FileOutputStream destino = new FileOutputStream(Path+listFiles[i].getName());           		         	          		
	            	IOUtils.copy(origem,destino);
                  }

[quote=gabriel.amoedo]Consegui resolver aqui. Joguei os arquivos selecionados numa lista de arquivos, depois utilizei a IOUtils pra copiar! :smiley:

[code]
File[] listFiles = chooser.getSelectedFiles();

              for(int i=0; i < listFiles.length; i++){            		                          
     		FileInputStream origem = new FileInputStream(listFiles[i].getPath());
       		FileOutputStream destino = new FileOutputStream(Path+listFiles[i].getName());           		         	          		
            	IOUtils.copy(origem,destino);
              }

[/code][/quote]

Cara, tentei fazer com seu código, mas o “IOUtils” não reconheceu o “copy”. De resto tá beleza, o que você fez?

PS: Explica esse “Path+listFiles[i]” também.

Mas você chegou a pegar o jar da IOUtils? Qual é a versão dela?

Eu peguei a commons-io-2.3.jar (jdk 1.6)…

Depois disso consegui utilizar a IOUtils…

Esse Path é uma String com o caminho da pasta onde se quer salvar…
E o listFiles[i] corresponde a cada arquivo que fica gravado nessa lista de arquivos. Quando se dá o getName, ele captura exatamente o nome do arquivo e depois fica fácil gravar com o mesmo nome em outra pasta.

String Path = "C:/Teste/"
listFiles[i].getName = “manual.pdf”

Com essa concatenação, você consegue gravar um arquivo com esse mesmo nome, na pasta que escolheu.

Ah tá. Você tá usando a API Commons IOUtils 2.3 da Apache. Show.

Consegui! :smiley:
Será que tem um jeito de o usuário escolher a pasta que vai salvar também?

Código que usei para testar:

[code]package padrao;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import org.apache.commons.io.IOUtils;

public class Principal {

public static void main(String[] args) {

    JFrame frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.setSize(800, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    

    JButton button = new JButton("Chamar o Seletor");
    frame.add(button);
   
    button.addActionListener(new ActionListener() {
        

        @Override
        public void actionPerformed(ActionEvent e) {
            JFileChooser fc = new JFileChooser();
            fc.setDialogTitle("Salvar arquivos");
            fc.setDialogType(JFileChooser.SAVE_DIALOG);
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            fc.setMultiSelectionEnabled(true);
            File dir = new File("C:/Documents and Settings/cfdubeux/Desktop/PNG/");
            File [] listar = dir.listFiles();
            FileInputStream origem;
            FileOutputStream destino;
            fc.setSelectedFiles(listar);
            String caminho ="\\temp/";
            int i = fc.showSaveDialog(null);
            if (i == JFileChooser.APPROVE_OPTION){
            File [] listFiles = fc.getSelectedFiles();
            for (int x=0; x < listFiles.length; x++){
             try {
            origem = new FileInputStream(listFiles[x].getAbsolutePath());  
            destino = new FileOutputStream(caminho+listFiles[x].getName());
            { 
                    }
            IOUtils.copy(origem, destino);
           
            origem.close();
            destino.close();
                } catch (IOException fnf){
                    fnf.getCause();
                }
            }
            
            }else {
               
            }
            
                }
    });

    frame.setVisible(true);

}

}[/code]

Boa tarde Pessoal.

Consegui implementar aqui, mas estou com esta mesma dúvida estou passando o caminho para a copia do arquivos de forma estática:

String caminho ="\temp/";

Estou com dúvidas de como passar o caminho selecionado pelo usuário do JfileChooser

Consegui!

Agora posta pra gente ver como rs…

Tive que criar um método.

JFileChooser

JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Salvar Arquivos"); fc.setDialogType(JFileChooser.SAVE_DIALOG); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int arq = fc.showSaveDialog(this); if (arq == JFileChooser.APPROVE_OPTION) { File dir = fc.getSelectedFile(); CopiarArquivos ca = new CopiarArquivos(); ca.copiarArquivos(dir.toString()); } else { repaint(); }

Método:

public void copiarArquivos(String caminho) { this.caminho = caminho; File dir = new File("\\CaptureTmp/Temp"); File[] listarArquivos = dir.listFiles(); for (int x = 0; x < listarArquivos.length; x++) { try { this.origem = new FileInputStream(listarArquivos[x]); this.destino = new FileOutputStream(caminho + "/" + listarArquivos[x].getName()); IOUtils.copy(this.origem, this.destino); this.origem.close(); this.destino.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, ex, "Ocorreu um erro!", JOptionPane.ERROR_MESSAGE); } } }

Galera, obrigado estava com essa pendência e consegui resolver aqui…

Só pra nota o site de download do commons-io-2.3.jar:

http://commons.apache.org/proper/commons-io/download_io.cgi.

Abraço