O conteúdo seguinte 1-4 são conhecimentos relacionados coletados online. Para resumir, eles são os seguintes pontos de conhecimento:
1. O método mais comumente usado para ler os arquivos de propriedades inputStream in = getClass (). GetResourceasStream ("ResourceName"); Este método requer que o arquivo de propriedades e a classe atual estejam na mesma pasta. Se em um pacote diferente, você deve usar:
InputStream ins = this.getClass (). GetResourceasStream ("/cn/zhao/Properties/testpropertiesPathPath2.Properties");2. Obtenha o método do caminho em java
3. Uma implementação simples de obter caminhos
4. Três maneiras de obter arquivos de propriedades em reflexão
1 Os métodos e pensamentos mais comuns sobre a obtenção de arquivos de propriedades em reflexão:
Existem muitas maneiras de ler arquivos de propriedades em Java. Os artigos mais comuns na Internet são "seis maneiras de ler os arquivos de propriedades em Java". No entanto, em aplicativos Java, o método mais usado é implementá -lo através do método GetResourCeasStream (Nome da String) da classe java.lang.class. No entanto, vi muitos códigos que leem os arquivos de propriedades fazem isso:
InputStream in = getClass (). GetResourceasStream ("ResourceName"); Há um problema aqui, ou seja, isso é omitido por padrão ao chamar getClass ()! Todos sabemos que isso não pode ser usado em métodos estáticos (estáticos) ou blocos estáticos. O motivo é que os métodos ou blocos de código do tipo estático pertencem à própria classe e não pertencem a um determinado objeto. Isso em si representa o objeto atual e o objeto não é inicializado quando métodos ou blocos estáticos são chamados.
O problema é: se eu não quiser que uma certa classe tenha um objeto, definirei o construtor padrão desta classe como privado e, é claro, não escreverei outros construtores comuns. E minha classe é uma classe de ferramentas, todos métodos e variáveis estáticos. Quero obter arquivos de propriedades em blocos estáticos ou métodos estáticos, e esse método não funcionará.
Então, o que devo fazer? De fato, esta classe não é usada assim. Só precisa obter um objeto de classe, o que não é fácil -
Tomando o objeto da classe pai de todas as classes, não é conveniente e seguro usar objeto.class do que usar o seu para escrever a própria classe? Haha, aqui está um exemplo para facilitar a comunicação.
importar java.util.properties; importar java.io.inputStream; importar java.io.ioException; / ** * Exemplo de arquivos de propriedades de leitura * Arquivo: testProperties.java * Usuário: leizhimin * Data: 2008-2-15 18:38:40 */ public Final Class TestProperties {private static string param1; String estática privada param2; static {Properties Prop = new Properties (); InputStream in = objeto. classe .getResourceasStream ("/test.properties"); tente {prop.load (in); param1 = prop.getProperty ("inityEars1") .Trim (); param2 = prop.getProperty ("inityEars2") .Trim (); } catch (ioexception e) {e.printStackTrace (); }} / *** Construtor privado, nenhum objeto é necessário* / private testProperties () {} public static string getParam1 () {return param1; } public static string getParam2 () {return param2; } public static void main (string args []) {System.out.println (getParam1 ()); System.out.println (getParam2 ()); }}Resultados em execução:
151
152
Obviamente, ainda não há problema em substituir o objeto.class por int.class. Haha, você pode tentar.
Além disso, se você ler o arquivo de propriedades em um método ou bloco estático, existe outro método mais seguro, que é obter diretamente o objeto de classe pelo nome da classe. Por exemplo, neste exemplo, ele pode ser escrito como testproperties.class. Este é o método mais seguro.
2 Como obter o caminho:
Arquivo fileB = novo arquivo (this .getClass (). GetResource ("") .getPath ()); Sistema. out .println ("FileB Path:" + FileB);2.2 Obtenha o nome do projeto da classe atual:
Sistema. out .println ("user.dir Path:" + System. getProperty ("user.dir")))3. Uma simples implementação de Java para obter o caminho
/ *** Obtenha o caminho absoluto do arquivo no caminho relativo do projeto** @param parentDir* O diretório pai do arquivo de destino, por exemplo, no diretório do projeto, existem sinices, bin e confiats, que você precisa ser o nome do arquivo* @B* Bin* Bin* FILIMET*, o arquivo de stick* @bin* @stick* @shit* FILIMET FILIMET* getPath (string parentDir, string filename) {string path = null; String userDir = System.getProperty ("user.dir"); String userDirName = novo arquivo (userdir) .getName (); if (userDirName.equalsignorecase ("lib") || userdirname.equalsignorecase ("bin")) {file newf = new File (userDir); Arquivo newp = novo arquivo (newf.getParent ()); if (filename.trim (). Equals ("")) {path = newp.getPath () + file.separator + parentdir; } else {path = newp.getPath () + file.separator + parentdir + file.separator + nome do arquivo; }} else {if (filename.trim (). Equals ("")) {path = userdir + file.separator + parentdir; } else {path = userdir + file.separator + parentdir + file.separator + fileName; }} retorno caminho; } 4 Use reflexão para obter o caminho:
InputStream ips1 = enumeração. classe .getClassLoader () .GetResourCeasStream ("CN/ZHAO/enumstudy/testPropertiesPath1.properties"); InputStream ips2 = enumeração. classe .getResourceasStream ("testPropertiesPath1.properties"); InputStream ips3 = enumeração. Classe .GetResourCeasStream ("Propriedades/TestPropertiesPath2.Properties");O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.