• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

amiloM1425

Temporary File

9 mensagens neste tópico

Até já me sinto mal de andar a criar tantos tópicos...  :-[

Uma pergunta, é possível criar um Temporary File a partir de um ficheiro já existente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um ficheiro temporário, ao ser criado, aparece vazio. Não é possível pegar num ficheiro e criar uma cópia temporária automaticamente.

Ficheiro temporários possuem algumas restrições, diferentes das dos ficheiros normais.

Se precisares de criar uma cópia, então terás de o fazer manualmente, lendo o ficheiro de origem e escrevendo os dados lidos para dentro de um ficheiro temporário.

Se criares um ficheiro temporário, é conveniente, ou uma boa prática, usares como prefixo o nome "temp" e como extensão ".temp", para que os ficheiros possam ser identificados e removidos por aplicações de limpeza quando ficam pendentes no disco.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Humm queres criar uma copia temporária de um ficheiro é isso ?

Sim, é isso que pretendo.

Se criares um ficheiro temporário, é conveniente, ou uma boa prática, usares como prefixo o nome "temp" e como extensão ".temp", para que os ficheiros possam ser identificados e removidos por aplicações de limpeza quando ficam pendentes no disco.

A extensão .temp não me é muito conveniente pela seguinte razão, na aplicação é possível imprimir 1 ou mais relatórios, e o que está a ser feito é criar um pdf temporário e imprimir esse pdf, no entanto este tem que ser eliminado no final. O problema é o seguinte, não consigo apagar o ficheiro porque (penso eu, e tenho quase 100% de certeza disto) o OS "pensa" que o ficheiro ainda está a ser utilizado, e julgo eu que é por causa do serviço de impressão, mesmo depois de o ficheiro ser impresso ele ainda fica um bocado de tempo "pendurado" até que possa ser apagado. A ideia então seria criar um ficheiro temporário que pudesse ser apagado posteriormente.

Já agora, ao pesquisar sobre isto vi o método deleteOnExit(), mas não o percebi muito bem. Este método apaga os ficheiros quando se termina a aplicação?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim ao usares o método deleteOnExit() quando terminas a aplicação o ficheiro é apagado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim ao usares o método deleteOnExit() quando terminas a aplicação o ficheiro é apagado.

Infelizmente não funcionou comigo, se calhar poderei estar a fazer alguma coisa mal.

CPdfCreator pdfCreator = new CPdfCreator();
		this.confInfo = confController.loadXML();
		String completeFilePath = pdfCreator.createPDF(mInfo, confInfo.getFileDestination(), confInfo.getReportNamePrefix(),null,true,true); //aqui cria ficheiro e imprime
		if(completeFilePath!=null)
		{
			new File(completeFilePath).deleteOnExit();
		}
		return true;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O método deleteOnExit funciona apenas em ficheiros criados como o método createTempFile, se o ficheiro não for criado com este método então não é um ficheiro temporário.

Experimenta mudar para

File temp = File .createTempFile( "temp", ".tmp", new File( completeFilePath) );
temp.deleteOnExit();

Altera o prefixo e a extensão para algo que te dê mais jeito.

Uma nota, um ficheiro temporário não foi feito para o que queres, estás a tentar dar a volta ao problema, já que devia ser tua a apagar o ficheiro. Além disso, como indiquei, um ficheiro temporário tem algumas restrições, como o facto de serem criados, por omissão, dentro da pasta de temporários do sistema operativo, não estando geralmente acessíveis ao utilizador, entre outras restrições. E possuem o overhead de serem criados com o nome único dentro da sessão da JVM, cada vez que a aplicação arrancar o JVM vai criar o ficheiro garantido que o sei nome é único e que não sobrepõe outros ficheiros temporários.

Mais uma nota, o código acima não cria o ficheiro em disco, dado que um File em Java não representa um ficheiro físico ou em memória mas sim um conjunto de parâmetros que podem ser usados para criar e manipular ficheiros, o ficheiro será criado quando tentares escrever para ele.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Uma nota, um ficheiro temporário não foi feito para o que queres, estás a tentar dar a volta ao problema, já que devia ser tua a apagar o ficheiro.

Sim, tens razão, e era o que estava a tentar fazer. Até porque tenho uma situação idêntica, só que em vez de imprimir envio por mail e aí não tenho qualquer tipo de problema em apagar o ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O método deleteOnExit funciona apenas em ficheiros criados como o método createTempFile, se o ficheiro não for criado com este método então não é um ficheiro temporário.

Permite-me uma pequena correcção, o método deletoOnExit() não funciona apenas com em ficheiros criados com o método createTempFile. De facto é o que se vê com maior regularidade, no entanto já vi exemplos em que utilizam outros ficheiros.

E alias, nuns métodos antigos do projecto em que peguei já utilizavam o deleteOnExit e aparentemente está tudo a funcionar.

Bom, mas em relação ao problema que tenho em mãos não o consegui resolver com a criação do ficheiro temporário.

Sei que não soa como sendo uma solução ideal, mas talvez resolva o meu problema. Estou a pensar criar uma pasta temporária da aplicação, para a qual são colocados os ficheiros temporários e sempre que reiniciar a aplicação apago o seu conteúdo, encontram algum possível inconveniente nisto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora