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).
importjava.io.*;classTesteGetResourceAsStream{publicvoidteste()throwsIOException{InputStreamis=getClass().getResourceAsStream("teste.txt");BufferedReaderbr=newBufferedReader(newInputStreamReader(is));System.out.println(br.readLine());br.close();// tudo que abrir, feche!// 20 segundos para dar tempo de eu trocar o arquivo de testetry{Thread.sleep(20000);}catch(InterruptedExceptionex){};// agora relendo o arquivois=getClass().getResourceAsStream("teste.txt");br=newBufferedReader(newInputStreamReader(is));System.out.println(br.readLine());br.close();// tudo que abrir, feche!}publicstaticvoidmain(String[]args)throwsIOException{TesteGetResourceAsStreamts=newTesteGetResourceAsStream();ts.teste();}}