Eu tenho o seguinte código tentando ler um arquivo de propriedades:
Recebo uma exceção na última linha. Especificamente:
obrigado Nikos
Com base em sua exceção, o InputStreamé nulo, isso significa que o carregador de classes não está localizando seu arquivo de propriedades. Suponho que myProp.properties está na raiz do seu projeto, se for esse o caso, você precisa de uma barra anterior:
— Mark Elliot
minha hierarquia de arquivos é: src -> myPackage -> myClass.java, myProp.properties. Eu fiz o que você me aconselhou, mas ainda lança a mesma exceção
getResourceAsStreamprocura o arquivo no caminho de classe. Se seu arquivo de propriedades estiver no diretório do pacote de myPackage, use /myPackage/myProp.propertiescomo o caminho.
@Mark Elliot e se eu tiver um confpacote para armazenar todos os meus arquivos de configuração e minha hierarquia de arquivos for:, myproject ->src, conf, testcomo vou carregar as propriedades adicionando uma barra anterior?
— Roger Ray
Você pode encontrar informações nesta página:
— Steven Gomez
Não se esqueça de fechar o Readerin prop.load(reader), conforme documentação:The specified stream remains open after this method returns
Você pode usar a ResourceBundleclasse para ler o arquivo de propriedades.
ResourceBundle rb = ResourceBundle.getBundle ("myProp");
— Mcolak
Essa abordagem é recomendada para i18n.
conf/filename.properties base no diretório raiz do projeto
— Tienya
Você não pode usar essa palavra - chave como -
em um contexto estático.
A melhor coisa seria controlar o contexto do aplicativo como -
então você pode carregar o arquivo de recursos do classpath -
Isso funcionará para contextos estáticos e não estáticos e a melhor parte é que esse arquivo de propriedades pode estar em qualquer pacote / pasta incluído no classpath do aplicativo.
ApplicationContext está disponível apenas no caso de aplicativo Spring
Seu arquivo deve estar disponível como com/example/foo/myProps.propertiesno classpath. Em seguida, carregue-o como:
se o seu config.properties não está no diretório src / main / resource e está no diretório raiz do projeto, você precisa fazer algo como abaixo: -
File configFile = new File(myProp.properties);
— GUDDU KUMAR
Certifique-se de que o nome do arquivo esteja correto e que o arquivo esteja realmente no caminho da classe. getResourceAsStream()retornará null se este não for o caso que faz com que a última linha lance a exceção.
Se myProp.properties estiver no diretório raiz do seu projeto, use /myProp.properties.
Como o arquivo de propriedades não está na raiz do projeto, você não precisa da barra inicial.
Eu estava recebendo a exceção lançada em primeiro lugar sem a barra inicial. Ainda não está funcionando.
Você pode usar java.io.InputStream para ler o arquivo conforme mostrado abaixo:
— Tarun Jain
Como converter InputStream para arquivo em java? Eu queria ler o arquivo .properties usando a API de Arquivo
Dado o contexto loader.getResourceAsStream("myPackage/myProp.properties")deve ser usado.
Liderar '/'não funciona com ClassLoader.getResourceAsStream(String)método.
Como alternativa, você pode usar o Class.getResourceAsStream(String)método, que usa '/'para determinar se o caminho é absoluto ou relativo ao local da classe.
Se o caminho do arquivo de propriedades e o caminho da classe java forem iguais, você deve fazer isso.
src / myPackage / MyClass.java
src / myPackage / MyFile.properties
InputStream stream = MyClass.class.getResourceAsStream("MyFile.properties");
— Oguzhan Cevik
Nenhuma das respostas atuais mostra que InputStreamestá sendo fechado (isso vazará um descritor de arquivo) e / ou não trata do .getResourceAsStream()retorno de null quando o recurso não é encontrado (isso levará a um NullPointerExceptioncom a mensagem confusa, "inStream parameter is null"). Você precisa de algo como o seguinte:
String propertiesFilename = "server.properties";
try (var inputStream = getClass().getClassLoader().getResourceAsStream(propertiesFilename)) {
throw new FileNotFoundException(propertiesFilename);
"Could not read " + propertiesFilename + " resource file: " + e);
Para o arquivo de propriedades de leitura com sua ordem original:
File file = new File("../config/edc.properties");
for(Object propKey : layout.getKeys()){
PropertiesConfiguration propval =  layout.getConfiguration();
String value = propval.getProperty((String) propKey).toString();
out.print("Current Key:" + propkey + "Current Value:" + propval + "<br>");
Muitas respostas aqui descrevem métodos perigosos em que instanciam um fluxo de entrada de arquivo, mas não obtêm uma referência ao fluxo de entrada para fechar o fluxo posteriormente. Isso resulta em fluxos de entrada pendentes e vazamentos de memória. A maneira correta de carregar as propriedades deve ser semelhante a seguinte:
try(InputStream fis = new FileInputStream("myProp.properties")) {
System.out.println("Unable to find the specified properties file");
Observe a instanciação do fluxo de entrada do arquivo em try-with-resourcesbloco. Uma vez FileInputStreamque a pode ser fechada automaticamente, ela será fechada automaticamente depois que o try-with-resourcesbloco for encerrado. Se você quiser usar um trybloco simples , deve fechá-lo explicitamente usando fis.close();no finallybloco.
Vejo que a pergunta é antiga. Se alguém topar com isso no futuro, acho que esta é uma maneira simples de fazer isso. Mantenha o arquivo de propriedades na pasta do projeto.