Copiar e colar

Olá, quero saber como posso copiar um diretório e/ou um arquivo e colocar em outro diretório.

Pode criar um método igual à esse:

public void copiar(InputStream origem, OutputStream destino) throws IOException {
    byte[] bytes = new byte[8192];
    for (int lidos = -1; (lidos = origem.read(bytes)) != -1; destino.write(bytes, 0, lidos)) {}
    destino.flush();
}

E utilizar da seguinte forma:

InputStream arquivoOrigem = new FileInputStream("caminho do arquivo de origem");
OutputStream arquivoDestino = new FileOutputStream("caminho do arquivo de destino");
copiar(arquivoOrigem, arquivoDestino);
arquivoOrigem.close();
arquivoDestino.close();
1 curtida

Muito interessante, mas tenho uma dúvida. Existe no Java como em algumas linguagens uma função estática que permita invocar tarefas de linha de comando? Algo como system.exec(“dir”); ou system.execute(“copy arqA.txt arqB.txt”); Imagino que se isso existir o Java deve abrir uma thread que é executada à parte e por isso deve ser usada com critério.

Com a classe Runtime você consegue isso.
Mas leia a documentação dos métodos com atenção, pois dependendo do tipo de programa que você for executar, pode ser necessário você criar explicitamente Threads para ler a saída e os erros do programa que foi executado.

Nesta página tem um exemplo que escrevi há alguns anos.

1 curtida

Mas dá pra fazer getClass().getResource() no FileInputStream?

O método getClass() é herdado da classe Object.
Porque você quer usar o getClass().getResource()?
Você quer copiar arquivos ou quer extrair conteúdo do seu JAR para um diretório?
Se quer extrair conteúdo do JAR, não adianta usar o getClass().getResource(), tem que usar getClass().getResourceAsStream().

Não, eu deixei arquivos em uma package diferente, arquivos .bat por exemplo.