Como ler arquivos internos e externos de forma transparente

Olá pessoal,

tenho um método que recebe o path de um arquivo de propriedades e retorna um InputStream. O método precisa ler esse arquivo, porém esse arquivo pode ser externo ou interno. Isto é, o arquivo pode estar no c: ou na estrutura de diretórios da aplicação.

Eu fiz o código abaixo.


private InputStream getInputStreamDoAquivoDeProperties(
			String pathArquivoProperties) throws Exception {
		InputStream propertiesInputStream;
		
		File file = new File(pathArquivoProperties);
		
		if (file.exists()) {
			propertiesInputStream = new FileInputStream(file);
		} else {
			ClassLoader loader = Thread.currentThread().getContextClassLoader();
			propertiesInputStream = loader.getResourceAsStream(pathArquivoProperties);
			if (propertiesInputStream == null){
				// throws alguma coisa
			}		
						
		}
			
		return propertiesInputStream;
}

Alguém tem alguma solução mais elegante.

Abraços

Eu faria assim:

public InputStream getInputStreamFromPath(String path) throws Exception { File file = new File(path); return new FileInputStream(file); }

E na hora de passar o path por parâmetro, eu passaria sempre o endereço em que o arquivo está, independente se esteja na aplicação ou fora.
Se estiver fora, passe “C:\…\arquivo.extensao”, senão, utilize o método getRealPath() da Interface HttpServletRequest.

Sim eu sei que o método getRealPath está depreciado, mas para mim facilita se eu utilizá-lo.

=)