Copia de Arquivos

Estou com problemas para copiar um arquivo de um lugar para outro, pesquisando encontrei o seguinte código mas não está funcionando, alguém pode me ajudar? O código não gera nenhuma excepiton, executa com sucesso mas não copia o arquivo jpg para a pasta.

package backupdaher;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {

    public void copyDirectory(File srcDir, File dstDir) throws IOException {
        if (srcDir.isDirectory()) {
            if (!dstDir.exists()) {
                dstDir.mkdir();
            }
            String[] children = srcDir.list();
            for (int i = 0; i < children.length; i++) {
                copyDirectory(new File(srcDir, children[i]), new File(dstDir, children[i]));
            }
        } else {
            copy(srcDir, dstDir);
        }
    }

    void copy(File src, File dst) throws IOException {
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst);

        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }

    public static void main(String[] args) {
        Main m = new Main();
        try {
            m.copyDirectory(new File("C:\\Documents and Settings\\tecnico\\Desktop\\imagem.jpg"),
                    new File("C:\\Documents and Settings\\tecnico\\Meus documentos\\Nova pasta\\"));
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Ao invés de duas barras (\), não seria apenas uma ()?

eu prefiro utilizar FileChannel
segue exemplo

public void copiaArquivo(){ try { // Cria channel na origem FileChannel oriChannel = new FileInputStream("c:\\temp\\imagem.bmp").getChannel(); // Cria channel no destino FileChannel destChannel = new FileOutputStream("d:\\temp\\imagem.bmp").getChannel(); // Copia conteúdo da origem no destino destChannel.transferFrom(oriChannel, 0, oriChannel.size()); // Fecha channels oriChannel.close(); destChannel.close(); } catch (Exception e) { throw new RuntimeException(e); } }

avsouza, fiz como você disse agora estou tendo o seguinte erro:

SEVERE: null
java.lang.RuntimeException: java.io.FileNotFoundException: C:\Documents and Settings\tecnico\Meus documentos\Nova pasta (Acesso negado)
        at backupdaher.Main.copiaArquivo(Main.java:27)
        at backupdaher.Main.main(Main.java:62)
Caused by: java.io.FileNotFoundException: C:\Documents and Settings\tecnico\Meus documentos\Nova pasta (Acesso negado)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
        at backupdaher.Main.copiaArquivo(Main.java:20)
        ... 1 more

Tá dando acesso negado, mas eu sou o administrador da maquina. O que pode ser?

Para copiar dessa pasta o usuário que você está logado no windows deve ser o usuário ‘tecnico’ (talvez com o usuário do Administrador também funcione)

Tem certeza que voce está logado com esse usuário?
Tenta com um arquivo diferente ^^

[]'s

Agora que fui ver seu update XD

Vai no arquivo e libera a permissão para o usuário que você está logado.

Para evitar que ele lance excessões, acho que existem métodos canRead / canWrite para verificar permissões de leitura/escrita no arquivo.

Estranho, normalmente a mensagem reflete exatamente aquilo.

O erro é o seguinte amigo, para o FileOutputStream(“C:\Pasta1\arquivo.jpg”) deve ser passado o nome do arquivo também. Não testei com jpg… mas cópia de arquivo txt funciona
tipo assim:

         InputStream in = new FileInputStream("C:\\pasta1\\arquivo1.txt");
	OutputStream out = new FileOutputStream("C:\\pasta1\\Pasta2\\arquivo2.txt");