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!
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.