Como descarregar um getResourceAsStream(arquivo)?

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(); 
    }
}