Boa tarde pessoal.
Com um objeto file consigo copiar um arquivo de um lugar para outro? Se não como faço?
Boa tarde pessoal.
Com um objeto file consigo copiar um arquivo de um lugar para outro? Se não como faço?
O objeto java.util.File não tem métodos para copiar arquivos.
Procure no GUJ (usando o Google) mesmo por:
filechannel transferto site:www.guj.com.br
Até consegue:
public void copiarArquivo() {
try {
String inFileName = "C:\original.txt";
String outFileName = "D:\copia.txt";
FileInputStream in = new FileInputStream(inFileName);
FileOutputStream out = new FileOutputStream(outFileName);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Copiar pastas da também?
vi esse codigo aqui no GUJ mesmo, porém da dando exceção:
File sourc = new File("\\10.0.16.5\nas\Prog_Inst\RM_Sistemas\RM_10.80\CurrentInstall"); // CurrentInstall é um diretorio.
File dest = new File("C:\");
try {
CopiaArquivo.copyFile(sourc, dest);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
package com.instal.ler.diretorio;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
public class CopiaArquivo {
public static void copyFile(File source, File destination) throws IOException{
if (destination.exists())
destination.delete();
FileChannel sourceChannel = null;
FileChannel destinationChannel = null;
try {
sourceChannel = new FileInputStream(source).getChannel();
destinationChannel = new FileOutputStream(destination).getChannel();
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
} finally {
if (sourceChannel != null && sourceChannel.isOpen())
sourceChannel.close();
if (destinationChannel != null && destinationChannel.isOpen())
destinationChannel.close();
}
}
}
O segundo parâmetro não pode ser um nome de diretório. Tem de ser o nome de um arquivo.
Ai regaça, eu preciso copiar um diretorio inteiro da rede para o C:
Uai, agora é com você. Deixe de ser preguiçoso. Uma forma de você fazer isso:
File f = new File ("c:\blablabla\teste.txt"); // nome de um arquivo
File g = new File ("c:\temp"); // nome de um diretório.
File h = new File (g, f.getName()); // vai ficar exatamente do jeito que você quer - c:\temp\teste.txt")
Uai, agora é com você. Deixe de ser preguiçoso. Uma forma de você fazer isso:
File f = new File ("c:\blablabla\teste.txt"); // nome de um arquivo File g = new File ("c:\temp"); // nome de um diretório. File h = new File (g, f.getName()); // vai ficar exatamente do jeito que você quer - c:\temp\teste.txt")
Mas, do jeito que vc ta me mostrando eu copio um arquivo para “temp” nao e nao? Não tem como copiar uma pasta minha inteira com varios arquivos dentro para o “c:” ?
De qualquer forma vou testar aqui.
Eu dei um exemplo com C:\temp; vocè pode escolher qualquer outro diretório. Se você quer usar d:\ ou q:\ ou \blablabla\x$ , isso é com sua maravilhosa capacidade de entender as coisas.
Ou eu nao to conseguindo entender o que vc ta falando ou eu to viajando rs.
È pq no seu exemplo vc copia um arquivo eu preciso copiar a pasta nao o arquivo.
no ano retrasado o tingol me passou um exemplo ótimo usando new io… veja:
http://www.guj.com.br/posts/list/82688.java
quando você precisar copiar pastas inteiras, você precisa dar um listFiles (se não me engano) no file apontando para a pasta e copiar arquivo para arquivo… isso dentro de um método que recebe o file em questão.
Cada file do array retornado deve ser verificado se é um arquivo ou pasta(tem metodo pra isso, alguma coisa do tipo isFolder, isFile, sei la), caso seja arquivo será copiado, caso seja pasta você cria ela (acho que tem um createNewFile, alguma coisa assim) e chama recursivamente o método que você está usando, para ele copiar a subpasta.
Caso nenhuma das dicas do pessoal funcione, tem esses sites aqui que tu pode dar uma olhada:
http://www.1your.com/drupal/copyfilefolderusingrecursionJava
http://www.java-tips.org/java-se-tips/java.io/how-to-copy-a-directory-from-one-location-to-another-loc.html
http://www.roseindia.net/java/example/java/io/CopyDirectory.shtml
![]()
public class Main {
public static void main(String[] args) throws IOException {
File origem = new File("E:\MY_JAVA_APP\");
File destino = new File("C:\Novo Diretorio");
new CopiarDiretorio().copyDirectory(origem, destino);
}
}
public class CopiarDiretorio {
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);
}
}
public 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();
}
}
Detalhes podem ser encontrados aqui: http://www.exampledepot.com/egs/java.io/pkg.html