setLastModified não funciona

7 respostas
rafaengenharia

Tenho uma string contendo uma data no formato “dd/MM/yy HH:mm:ss”. estou fazendo :

...

String DATA_ARQUIVO = "09/10/07 17:11:46";

DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
long ultimaModificacaoFile = df.parse(DATA_ARQUIVO).getTime();

File ARQUIVO_CORRENTE = new File(meufile.txt);

if(ARQUIVO_CORRENTE.exists()){

if(ARQUIVO_CORRENTE.setLastModified(ultimaModificacaoFile)){

}else{ System.out.println ("Não foi possível mudar a data de modificação.");}


}else{

System.out.println ("Arquivo não existe.");

}

...

O código compila e executa direitinho mas sempre exibe a mensagem “Não foi possível mudar a data de modificação.” . Alguém pode dar um força com essa questão de mudar a data de modificação do arquivo ? Estou desenvolvendo a aplicação para rodar em windows xp. Agradeço qualquer ajuda.já pesquisei mas num encontrei muito a respeito aqui no forum e na API.

7 Respostas

H

Na linha 08: File ARQUIVO_CORRENTE = new File(meufile.txt);
Esse arquivo você tem colocar o caminho real. pois talvez ele não esteja pegando corretamente.

[]'s

T

Hum - 09/10/07 é entendido pelo Java como 09/10/2007 ou 09/10/0007?
Se for a última alternativa, o Windows não irá aceitar a alteração da data, porque não havia computadores disponíveis no ano 7 da era cristã. (Nessa época Jesus tinha 12 anos e estava estudando, ou dando aulas, para os doutores da Lei, se não me engano. Mas não sou teólogo nem arqueólogo. Mas acho que não havia arquivos naquela época.)
Experimente imprimir o ano (com 4 dígitos) para ver o que o Java entendeu.

rafaengenharia

Tentei as duas sugestões anteriores e nenhuma deu certo. Botei o caminho absoluto na hora de instanciar um novo objeto da classe File e também tentei o ano com 4 digitos como abaixo mas não funcionou:

String y = "13/10/2007 17:20:21";
					
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
long ultimaModificacaoDateFile = df.parse(y).getTime();

Continua dando o não foi possível efetuar a modificação.

rafaengenharia

Tem um detalhe que talvez tenha algo a ver.estou baixando os arquivos via ftp, utilizando a api org.apache.commons.net.ftp.FTPClient, e estou tentando mudar a data de modificação dos arquivos logos apos baixa-los assim:

...

String y = "13/10/2007 17:20:21";  
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");  
long ultimaModificacaoDateFile = df.parse(y).getTime();

FileOutputStream ARQUIVO_CORRENTE_REMOTO = new FileOutputStream(ARQUIVO[1]);
if (ftp.retrieveFile(ARQUIVO[1], ARQUIVO_CORRENTE_REMOTO )){

File ARQUIVO_CORRENTE = new File(ARQUIVO[1]);

if(ARQUIVO_CORRENTE.exists()){//checa se o arquivo já existe no diretório corrente local

if(ARQUIVO_CORRENTE.setLastModified(ultimaModificacaoDateFile)){

}else{ System.out.println ("Não foi possível mudar a data de modificação.");}


}else{

System.out.println ("Arquivo não existe.");

}

System.out.println (ARQUIVO[1] + "Baixado com sucesso. - " + ARQUIVO_CORRENTE.getName());

}else{
System.out.println ("Não foi possível baixar o arquivo" + ARQUIVO[1]);
}

}

}
}

...

Sendo que a parte do código referente a conexão ftp download tah funcionando direitinho, só o lastModified que
num tah rolando mesmo.

T

Uai, eu rodei este programa e funcionou direitinho. Acho que está ocorrendo o seguinte: o arquivo que você baixou não foi fechado por algum motivo, portanto setLastModified não conseguiu alterar a data do arquivo.

import java.io.*;
import java.util.*;
import java.text.*;

class TesteSetLastModified {
    public static void main(String[] args) throws ParseException {
        File f = new File (args[0]);
        DateFormat df = new SimpleDateFormat ("dd/MM/yyyy HH:mm:ss");
        Date dt = df.parse (args[1]);
        System.out.println (f.setLastModified (dt.getTime()));
        File g = new File (args[0]);
        System.out.println (df.format (new Date (g.lastModified ())));
    }
}
rafaengenharia

Resolvi, o problema era que realmente os arquivos ainda não estavam fechados logo após baixá-los,no código anterior que havia postado só adicionei:

...

if (ftp.retrieveFile(ARQUIVO[1], ARQUIVO_CORRENTE_REMOTO )){
ARQUIVO_CORRENTE_REMOTO.close();//ISSO ERA O QUE FALTAVA
...

e tudo funcionou bonito !!

att,

T

Como eu sempre falo:

Escove os dentes antes de dormir, não largue toalhas molhadas em cima da cama, feche a tampa do vaso depois de usá-lo, devolva sempre os livros da biblioteca depois de lê-los, não jogue lixo no chão, e feche os arquivos depois de abri-los.

:stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

Criado 18 de outubro de 2007
Ultima resposta 18 de out. de 2007
Respostas 7
Participantes 3