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");