Ao criar arquivo, apaga no final da execução

Estou com o seguinte comportamento estranho.
Estou criando um arquivo texto, usando FileWriter e BufferedWriter. Ao final da execução (void main), o arquivo gerado é eliminado.
Se eu debugar e interromper a execução, o arquivo é mantido.
Percebi que esse comportamento começou, a partir de alguma versão do Java.
Alguém passou por isso?

Estranho… O que você tá criando não é um arquivo temporário? Ou talvez esteja setando esta propriedade.

Tenta criar o arquivo em um local ao qual você possa ler e escrever com baixos privilégios do SO.

Eu sempre usei dessa forma. Tenho o código na cabeça.
public static void write( String dir, String fileName, boolean append, String content ) {
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(new File(dir,fileName),append);
bw = new BufferedWriter(fw);
bw.write(content);
bw.flush();
} catch (Exception e) {
// TODO: handle exception
} finally {
try {bw.close();}catch(Exception e) {}
try {fw.close();}catch(Exception e) {}
}
}

Vc está usando o parâmetro append como true ou false?

Append = true.
for( int i = 0; i < listName.size(); i++ ) {
String line = “START:person”+listName.get(i)+"\n";
FileUtil.write(dir2, “nomes-train.txt”, true, line);
}

[RESOLVIDO] - No FileUtil tem o método delete, que estava com File file = New File(…
Esse código deveria estar deixando uma referência de memória, que gerava esse comportamento.
Alterei para:
public static boolean delete(String dir, String fileName) {
return new File(dir,fileName).delete();
}
Arquivo mantido!

1 curtida

Que FileUtil?

Variáveis locais são desalocadas assim que o método foi executado.
E mesmo assim, ter referência a um objeto File, não impede que ele seja apagado, o que muda é que depois de apagado o método exists() retorna false.

Provavelmente você tem algum código que está mantendo um InputStream ou OutputStream aberto, aí não dá pra apagar mesmo.