Pessoal, to com um problema em uma classe responsável por fazer a cópia de arquivos.
Aí na exception ele me retorna essa mensagem: Nao existem recursos de sistema sucifientes para concluir o serviço solicitado.
O JAVA está se referindo a recursos de sistema como memória, espaço em disco e etc?
Espaço em disco há até de sobra para copiar o arquivo.
O tamanho total do arquivo é de cerca de 800MB.
Segue o código que estou utilizando:
public static void main(String[] args) {
System.out.println("Backup da base de dados...");
FileChannel oriChannel = null;
String DIR_DESTINO = "";
try {
oriChannel = new FileInputStream("\\\\x.x.x.x\\dir_backup$\\BASE.ZIP").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\\dir_backup$\\" + 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());
} catch (IOException e) {
System.out.println("Nao foi possivel realizar o backup: " + e.getLocalizedMessage());//ESSA É A EXCEÇÃO EXIBIDA.
System.exit(0);
}
System.out.println("Copia concluída com sucesso.");
// Fecha channels
try {
oriChannel.close();
destChannel.close();
} catch (Exception e) {
} finally {
System.exit(0);
}
}
Explicando melhor o código.
Um sistema que temos gera um arquivo compactado como backup de sua base de dados.
Porém ele gera sempre com o nome BASE.ZIP
Dessa forma temos apenas o backup de um dia.
O código acima copia esse arquivo para um outro servidor de backups, colocando o mesmo na pasta do dia da semana correspondente, dessa forma teremos o backup de até 7 dias atrás.
Porém estou com esse erro.
Agradeço a quem puder ajudar.
Backup da base de dados...
Iniciando copia de arquivo...
java.io.IOException: N?o existem recursos de sistema suficientes para concluir o serviço solicitado
Copia concluída com sucesso.
at sun.nio.ch.FileDispatcher.pwrite0(Native Method)
at sun.nio.ch.FileDispatcher.pwrite(FileDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:68)
at sun.nio.ch.IOUtil.write(IOUtil.java:28)
at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:638)
at sun.nio.ch.FileChannelImpl.transferFromFileChannel(FileChannelImpl.java:529)
at sun.nio.ch.FileChannelImpl.transferFrom(FileChannelImpl.java:590)
at backupsh.Main.main(Main.java:60)
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
O erro ocorre quando quero copiar o arquivo para o servidor.
Fiz um teste copiando o mesmo para minha máquina local, c:\pasta… e copiou normalmente.
O compartilhamento do servidor é protegido por senha. Porém acessando via explorer eu consigo acessar, pois a senha já está armazenada no usuário do Windows.
Pode ser isso?
Se sim, há alguma forma de informar o usuário/senha do servidor antes da cópia?
[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.
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 ?
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…