Ola,
Tenho arquivos XML que, apos terem sido alterados por fora do programa principal, precisam ser recarregados. Como a aplicacao é Swing e pode rodar por JWS, eu uso o getResourceAsStream(arquivo) para ler o arquivo. Tudo funciona bem em ambiente de producao. Mas em ambiente de desenvolvimento, onde a todo momento preciso alterar os XMLs, eu tenho que sair do programa e entrar de novo, pois o getResourceAsStream() guarda em memoria as informacoes ja lidas. Eu nao achei no Class Loader nenhum metodo do tipo unloadResourceAsStream() ou algo do tipo. Tem algum plano B?
Aham - acho que aconteceu alguma coisa esquisita. Ele não deveria guardar coisa nenhuma (concordo que se o arquivo estiver no .jar até seria razoável guardar o conteúdo em algum lugar).
Rodei este programa, sem esquecer de fechar o arquivo. Para rodar este programa, crie um arquivo “teste.txt” no mesmo diretório do .class. Rode o programa, e depois que ele imprimir a primeira linha, altere o arquivo “teste.txt” (você tem 20 segundos para fazer isso).
import java.io.*;
class TesteGetResourceAsStream {
public void teste() throws IOException {
InputStream is = getClass().getResourceAsStream ("teste.txt");
BufferedReader br = new BufferedReader (new InputStreamReader (is));
System.out.println (br.readLine());
br.close(); // tudo que abrir, feche!
// 20 segundos para dar tempo de eu trocar o arquivo de teste
try { Thread.sleep (20000); } catch (InterruptedException ex) {};
// agora relendo o arquivo
is = getClass().getResourceAsStream ("teste.txt");
br = new BufferedReader (new InputStreamReader (is));
System.out.println (br.readLine());
br.close(); // tudo que abrir, feche!
}
public static void main(String[] args) throws IOException {
TesteGetResourceAsStream ts = new TesteGetResourceAsStream ();
ts.teste();
}
}