Opa,
você pode chamar comandos do windows sim:
Runtime.getRuntime().exec()
OBS: parece que você está com algum problema na rede…
Opa,
você pode chamar comandos do windows sim:
Runtime.getRuntime().exec()
OBS: parece que você está com algum problema na rede…
[quote=sergiom]Opa,
você pode chamar comandos do windows sim:
Runtime.getRuntime().exec()
OBS: parece que você está com algum problema na rede…[/quote]
Opa.
Mas que tipo de problema pode ser?
Porque o arquivo já está na rede, eu consigo acessá-lo. O problema eh pra copiar para outro local da rede.
Mas por momento vou tentar algo com esse comando, pra ver se consigo algo.
Vlw.
O arquivo está em uma máquina da rede e você tenta copiá-lo para a sua máquina ou para outra da rede diretamente?
Pelo windows funciona legal?
[quote=sergiom]O arquivo está em uma máquina da rede e você tenta copiá-lo para a sua máquina ou para outra da rede diretamente?
Pelo windows funciona legal?[/quote]
Sim, pelo windows funciona blza.
Se eu copiar o arquivo para minha máquina funciona normal. O problema é copiar para essa outra máquina da rede.
Tipo, se eu copiar para c:\pasta funciona. Mas fiz um teste tentando copiar para \127.0.0.1\pasta (compartilhei a pasta com o nome pasta) e não consegui. Apresentou o erro de recursos insuficientes, que não consigo entender o porque.
O stackTrace está ali nos posts tambem.
Faz alguma idéia?
Obrigado
Sinceramente não sei, nunca tentei copiar diretamente arquivos sem passar pelo computador local.
Uma opção seria copiar ele para o C:\ e depois repassar para o outro pc.
[quote=sergiom]Sinceramente não sei, nunca tentei copiar diretamente arquivos sem passar pelo computador local.
Uma opção seria copiar ele para o C:\ e depois repassar para o outro pc.[/quote]
Pois é, eu tentei isso também, mas sem sucesso.
A exception continua.
O problema acontece sempre quando o endereço de destino é um diretório de rede.
Por momento, acho que vou usar uma chamada ao copy do DOS mesmo.
Mas ainda quero achar uma solução, rsrs.
Mas vlw pelas dicas aew.
Só por curiosidade, muda alguma coisa se você alterar de transferFrom para transferTo (sei que não deveria, mas não custa tentar hehe), mudando também a variável que vai fazer o processo ?
cara, acho que estamos chegando lá.
Alterei para TransferTo e agora ele não exibe mais o erro.
O problema é que o arquivo não é copiado.
É um arquivo .ZIP.
Após a execução do código ele mostra o arquivo no destino, porém com 0 bytes.
Veja como ficou o novo código:
public class Main2 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException{
System.out.println("Backup da base de dados...");
FileChannel oriChannel = null;
String DIR_ORIGEM;
String DIR_DESTINO;
DIR_ORIGEM = "\\\\x.x.x.x\\bkp$\\BASE.ZIP";
try {
oriChannel = new FileInputStream(DIR_ORIGEM).getChannel();
} catch (Exception e) {
System.out.println("Nao foi possivel iniciar a copia: " + e.getLocalizedMessage());
System.exit(0);
}
Calendar dia = Calendar.getInstance();
String[] diaSem = {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"};
DIR_DESTINO = "\\\\x.x.x.x\\bkp$\\" + diaSem[dia.get(Calendar.DAY_OF_WEEK) - 1];
File dir = new File(DIR_DESTINO);
if (!dir.exists()) {
dir.mkdir();
} else {
String[] arqs = dir.list();
if (arqs.length > 0) {
for (String arq : arqs) {
File arquivo = new File(dir, arq);
arquivo.delete();
}
}
}
System.out.println("Iniciando copia de arquivo...");
FileChannel destChannel = null;
try {
destChannel = new FileOutputStream(DIR_DESTINO + "\\BASE.ZIP").getChannel();
} catch (Exception e) {
System.out.println("Nao foi possivel criar o arquivo de destino: " + e.getLocalizedMessage());
System.exit(0);
}
try {
//destChannel.transferFrom(oriChannel, 0, oriChannel.size()); ESSA LINHA COMENTADA ERA A AÇÃO ANTERIOR
oriChannel.transferTo(0, destChannel.size(), destChannel);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Copia concluída com sucesso.");
// Fecha channels
try {
oriChannel.close();
destChannel.close();
} catch (Exception e) {
} finally {
System.exit(0);
}
}
}
Acho que deve ser só um detalhe no transferTo.
Faz idéia?
Obrigado pela ajuda aew.
destChannel.size()
Acho que aqui está o detalhe. Seria oriChannel.size(), né?
[quote=sergiom]destChannel.size()
Acho que aqui está o detalhe. Seria oriChannel.size(), né?[/quote]
ops, sim realmente é oriChannel.size() mesmo.
Porém, ao alterar isso e rodar o código, o erro voltou…
Tah me dando nos nervos já esse código, rsrsrs.
É amigo, temos um bug:
http://stackoverflow.com/questions/2859530/what-does-insufficient-system-resources-error-mean
Aqui mostra a solução, copiando por partes o arquivo:
http://stackoverflow.com/questions/4444210/how-to-copy-a-large-file-in-windows-xp
eu ja tive um problema assim no passado também… acho que tinha tentado inclusive mapear uma unidade de rede no windows para a pasta e nem assim consegui transmitir o arquivo para outro lugar na rede…
[quote=sergiom]É amigo, temos um bug:
http://stackoverflow.com/questions/2859530/what-does-insufficient-system-resources-error-mean[/quote]
não é fácil essa vida de gaudério, rsrs.
Mas enfim, por momento acho que consigo dar um jeito chamando o copy por DOS.
Vou ver se consigo implementar assim.
Depois vejo o que faço.
Ms vlw mesmo pela força cara.
Até.
Pessoal, seguindo a saga… rsrs.
Consegui implementar com uma chamada ao comando copy do Windows.
Porém, ali no meu código eu tenho uma linha informando “Cópia concluída com sucesso” após esse comando.
O caso é que ela é exibida e o programa continua rodando, até finalizar a cópia.
Como posso fazer para “pausar” o andamento do código JAVA, dando sequencia somente quando o processo chamado pelo Runtime finalizar?
Segue o código:
public static void main(String[] args) throws IOException {
System.out.println("Backup da base de dados...");
String DIR_ORIGEM;
String DIR_DESTINO;
DIR_ORIGEM = "\\\\x.x.x.x\\bkp$\\BASE.ZIP";
Calendar dia = Calendar.getInstance();
String[] diaSem = {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"};
DIR_DESTINO = "\\\\x.x.x.x\\bkp$\\" + diaSem[dia.get(Calendar.DAY_OF_WEEK) - 1];
File dir = new File(DIR_DESTINO);
if (!dir.exists()) {
dir.mkdir();
} else {
String[] arqs = dir.list();
if (arqs.length > 0) {
for (String arq : arqs) {
File arquivo = new File(dir, arq);
arquivo.delete();
}
}
}
System.out.println("Iniciando copia de arquivo...");
Runtime.getRuntime().exec("cmd.exe /ccopy " + DIR_ORIGEM + " " + DIR_DESTINO + "\\BASE.ZIP");
System.out.println("Copia concluída com sucesso."); //essa linha só deve ser executada após o processo acima finalizar.
}
Obrigado.
[quote=sergiom]Aqui mostra a solução, copiando por partes o arquivo:
http://stackoverflow.com/questions/4444210/how-to-copy-a-large-file-in-windows-xp[/quote]
cara, não havia visto esse seu post.
Olhei lá e vou tentar implementar.
Mas por momento, algúem sabe me dizer como “trancar” a execução do JAVA, como mencionei acima?
Obrigado.
Cara, esse link é desse mesmo tópico, rsrs.
Mas enfim, consegui “trancar” a execução do JAVA durante a cópia.
Utilizei o método waitFor().
ficou beleza.
Flw.