Eu tenho o seguinte código tentando ler um arquivo de propriedades:
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);
Recebo uma exceção na última linha. Especificamente:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)
obrigado Nikos
java
properties
Nikos
fonte
fonte
getResourceAsStream
procura o arquivo no caminho de classe. Se seu arquivo de propriedades estiver no diretório do pacote demyPackage
, use/myPackage/myProp.properties
como o caminho.conf
pacote para armazenar todos os meus arquivos de configuração e minha hierarquia de arquivos for:,myproject ->src, conf, test
como vou carregar as propriedades adicionando uma barra anterior?Você pode encontrar informações nesta página:
http://www.mkyong.com/java/java-properties-file-examples/
fonte
Reader
inprop.load(reader)
, conforme documentação:The specified stream remains open after this method returns
Você pode usar a
ResourceBundle
classe para ler o arquivo de propriedades.fonte
conf/filename.properties
base no diretório raiz do projetofonte
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.
fonte
Seu arquivo deve estar disponível como
com/example/foo/myProps.properties
no classpath. Em seguida, carregue-o como:fonte
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: -
fonte
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
.fonte
Você pode usar java.io.InputStream para ler o arquivo conforme mostrado abaixo:
fonte
Dado o contexto
loader.getResourceAsStream("myPackage/myProp.properties")
deve ser usado.Liderar
'/'
não funciona comClassLoader.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.Exemplos:
fonte
Se o caminho do arquivo de propriedades e o caminho da classe java forem iguais, você deve fazer isso.
Por exemplo:
fonte
Nenhuma das respostas atuais mostra que
InputStream
está 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 umNullPointerException
com a mensagem confusa,"inStream parameter is null"
). Você precisa de algo como o seguinte:fonte
Para o arquivo de propriedades de leitura com sua ordem original:
fonte
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:
Observe a instanciação do fluxo de entrada do arquivo em
try-with-resources
bloco. Uma vezFileInputStream
que a pode ser fechada automaticamente, ela será fechada automaticamente depois que otry-with-resources
bloco for encerrado. Se você quiser usar umtry
bloco simples , deve fechá-lo explicitamente usandofis.close();
nofinally
bloco.fonte
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.
fonte
Especifique o caminho começando com src conforme abaixo:
fonte