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?
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.
F
Fellipe1
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:
G
gabriel.amoedo
Pois é justamente isso que não quero fazer. Por isso quero saber se há algum método nessas classes que consiga fazer isso…
F
Fellipe1
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.
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.
G
gabriel.amoedo
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.
Com essa concatenação, você consegue gravar um arquivo com esse mesmo nome, na pasta que escolheu.
cyruzin
Ah tá. Você tá usando a API Commons IOUtils 2.3 da Apache. Show.
cyruzin
Consegui! :D
Será que tem um jeito de o usuário escolher a pasta que vai salvar também?
Código que usei para testar:
packagepadrao;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importorg.apache.commons.io.IOUtils;publicclassPrincipal{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame.setLayout(newFlowLayout());frame.setSize(800,600);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLocationRelativeTo(null);JButtonbutton=newJButton("Chamar o Seletor");frame.add(button);button.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){JFileChooserfc=newJFileChooser();fc.setDialogTitle("Salvar arquivos");fc.setDialogType(JFileChooser.SAVE_DIALOG);fc.setFileSelectionMode(JFileChooser.FILES_ONLY);fc.setMultiSelectionEnabled(true);Filedir=newFile("C:/Documents and Settings/cfdubeux/Desktop/PNG/");File[]listar=dir.listFiles();FileInputStreamorigem;FileOutputStreamdestino;fc.setSelectedFiles(listar);Stringcaminho="\\temp/";inti=fc.showSaveDialog(null);if(i==JFileChooser.APPROVE_OPTION){File[]listFiles=fc.getSelectedFiles();for(intx=0;x<listFiles.length;x++){try{origem=newFileInputStream(listFiles[x].getAbsolutePath());destino=newFileOutputStream(caminho+listFiles[x].getName());{}IOUtils.copy(origem,destino);origem.close();destino.close();}catch(IOExceptionfnf){fnf.getCause();}}}else{}}});frame.setVisible(true);}}
I
Irvin
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
cyruzin
Consegui!
G
gabriel.amoedo
Agora posta pra gente ver como rs…
cyruzin
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);
}
}
}
ksantannap
Galera, obrigado estava com essa pendência e consegui resolver aqui…
Só pra nota o site de download do commons-io-2.3.jar: