boa tarde pessoal, primeiro agradeço a todos que verem meu problema com a intenção de ajudar e principalmente a akeles que ajudarem efetivamente.
eu tenho uma classe aqui chamada pela tela, que lista os arquivos de determinada pasta, copia os de determinadas extensões usando FileOutputStream usando buffer (para cada passagem de buffer eu poder atualiza a JProgressBar), depois vai nas subpastas e faz o mesmo (recursivamente). Aparentemente isso ja funciona.
o problema é que todos os arquivos exceto um deles, fica com 0 de espaço ocupado em disco… não sei pq… to dando flush e close no final… não sei pq q não funciona…
se alguem ai puder me ajudar…eu agradeceria mto… seguem os dois metodos, o que recebe os parametros e gerencia o que efetivamente é chamado a cada copia de arquivos… por favor peço que vejam e me mostrem aonde que eu to errando…
public void executa(final String[] extensoes, boolean copSubpastas, String endereco, String saida){
File diretorio = new File(endereco);
//tamanho=getFolderSize(endereco);eu devo usa essa linha na thread da janela Window
//criando a pasta para onde vão os dados, caso ela não exista
File output = new File(saida);
if (!output.exists()){
output.mkdirs();
}
FileFilter extencoes;
File[] arquivos=null;
for (int j=0;j<extensoes.length;j++){
final int k=j;
extencoes = new FileFilter() {
public boolean accept(File f){
return f.getName().endsWith(extensoes[k]);
}
};
arquivos = diretorio.listFiles(extencoes);
for (int i=0;i<arquivos.length;i++){
copia(arquivos[i], saida);
}
}
// aki começa a parte de refazer o mesmo nas subpastas
FileFilter pastas = new FileFilter() {
public boolean accept(File f){
return f.isDirectory();
}
};
File[] subpastas = diretorio.listFiles(pastas);
for (int i=0;i<subpastas.length;i++){
//System.out.println(subpastas[i].toString());
if (copSubpastas&&!output.getName().equals(subpastas[i].getName())){
executa(extensoes, copSubpastas, subpastas[i].toString(), saida+"\\"+subpastas[i].getName());
// System.out.println("comparando:\n\n"+subpastas[i].getName());
// System.out.println(output.getName()+"\n\n");
}
}
//arquivos = diretorio.listFiles(ff).toString();
}
public void copia(File arquivo, String saida){
FileInputStream origem = null;
FileOutputStream destino = null;
try{
origem = new FileInputStream(arquivo);
destino = new FileOutputStream(saida+"\\"+arquivo.getName());
int buf = Window.bufer;//bufer é um static int da classe window, a janela, ele é iniciado com 1024
byte[] buffer=new byte[buf];
tamanho = origem.available();
destino.flush();
while(status><=tamanho){
origem.read(buffer);
destino.write(buffer);
status+=buf;
System.out.println(status);
destino.flush();
}
//destino.flush(); // <--- testei aki pra ver se funcionava
destino.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "erro de I/O");
} catch (OutOfMemoryError e) {
JOptionPane.showMessageDialog(null, "faltou memoria para efetuar a operação");
}
}
entõ…olha os resultados, eu criei esse main só pra testa chamando o primeiro metodo:
public static void main(String args[]){
Transfere t=new Transfere();
String[] aaa= new String[3];
aaa[0]=".pdf";
aaa[1]=".doc";
aaa[2]=".class";
t.executa(aaa, true, "C:\\Documents and Settings\\flavio\\Meus documentos\\aaa", "C:\\Documents and Settings\\flavio\\Meus documentos\\bbb");
}
e olhem o resultado no dos, o tamanho dos arquivos:
C:\Documents and Settings\flavio\Meus documentos\aaa>dir
O volume na unidade C não tem nome.
O número de série do volume é C065-1D57
Pasta de C:\Documents and Settings\flavio\Meus documentos\aaa
19/02/2008 14:09 <DIR> .
19/02/2008 14:09 <DIR> ..
17/10/2007 10:05 17.464 1.class
14/01/2008 12:06 181.248 1.doc
22/08/2007 17:20 1.502.800 1.pdf
17/10/2007 10:05 9.795 2.class
29/01/2008 11:35 20.992 2.doc
14/09/2007 08:51 35.783 2.pdf
15/02/2008 11:57 3.367 build.xml
09/01/2008 12:54 10.595.718 estruturas de dados.rar
08/11/2007 12:02 3.490.570 Introdução à Programação I.rar
03/01/2008 09:02 15.360 modens.xls
20/02/2008 14:33 <DIR> novapasta
19/02/2008 14:09 <DIR> pasta 2
19/02/2008 14:09 <DIR> pasta3
14/02/2008 13:30 13.824 pc 2.xls
11 arquivo(s) 15.886.921 bytes
5 pasta(s) 7.130.439.680 bytes disponíveis
C:\Documents and Settings\flavio\Meus documentos\aaa>cd C:\Documents and Settings\flavio\Meus documentos\bbb
C:\Documents and Settings\flavio\Meus documentos\bbb>dir
O volume na unidade C não tem nome.
O número de série do volume é C065-1D57
Pasta de C:\Documents and Settings\flavio\Meus documentos\bbb
21/02/2008 14:00 <DIR> .
21/02/2008 14:00 <DIR> ..
21/02/2008 14:00 0 1.class
21/02/2008 14:00 0 1.doc
21/02/2008 14:00 1.503.232 1.pdf
21/02/2008 14:00 0 2.class
21/02/2008 14:00 0 2.doc
21/02/2008 14:00 0 2.pdf
21/02/2008 14:00 <DIR> novapasta
21/02/2008 14:00 <DIR> pasta 2
21/02/2008 14:00 <DIR> pasta3
6 arquivo(s) 1.503.232 bytes
5 pasta(s) 7.130.439.680 bytes disponíveis
C:\Documents and Settings\flavio\Meus documentos\bbb>
sera q alguem ai poderia me ajudar… não sei se falta fecha o arquivo…ou o q q é…