Los siguientes contenidos 1-4 son conocimientos relacionados recopilados en línea. En resumen, son los siguientes puntos de conocimiento:
1. El método más utilizado para leer archivos de propiedades EnumeStream in = getClass (). GetResourceASStream ("ResourceName"); Este método requiere que el archivo de propiedades y la clase actual estén en la misma carpeta. Si en un paquete diferente, debe usar:
InputStream INS = this.getClass (). GetResourceasStream ("/cn/zhao/propiedades/testPropertIspath2.properties");2. Obtener el método de ruta en Java
3. Una implementación simple de la obtención de rutas
4. Tres formas de obtener archivos de propiedades en la reflexión
1 Los métodos y pensamientos más comunes sobre la obtención de archivos de propiedades en la reflexión:
Hay muchas formas de leer archivos de propiedades en Java. Los artículos más comunes en Internet son "seis formas de leer archivos de propiedades en Java". Sin embargo, en las aplicaciones Java, el método más utilizado es implementarlo a través del método getResourceasstream (nombre de cadena) de la clase java.lang.class. Sin embargo, he visto que muchos códigos que leen archivos de propiedades hacen esto:
InputStream in = getClass (). GetResourceASStream ("ResourceName"); ¡Hay un problema aquí, es decir, esto se omite de forma predeterminada al llamar a getClass ()! Todos sabemos que esto no puede usarse en métodos estáticos (estáticos) o bloques estáticos. La razón es que los métodos o bloques de código de tipo estático pertenecen a la clase misma y no pertenecen a cierto objeto. Esto en sí representa el objeto actual, y el objeto no se inicializa cuando se llaman métodos o bloques estáticos.
El problema es: si no quiero que una determinada clase tenga un objeto, entonces estableceré el constructor predeterminado de esta clase en privado y, por supuesto, no escribiré otros constructores comunes. Y mi clase es una clase de herramientas, todas las cuales son métodos y variables estáticas. Quiero obtener archivos de propiedades en bloques estáticos o métodos estáticos, y este método no funcionará.
Entonces, ¿qué debo hacer? De hecho, esta clase no se usa así. Solo necesita obtener un objeto de clase, que no es fácil -
Tomar el objeto de clase principal de todas las clases, ¿no es conveniente y más seguro usar objeto. Clase que usar el suyo para escribir la clase misma? Jaja, aquí hay un ejemplo para facilitar la comunicación.
import java.util.properties; import java.io.inputstream; import java.io.ioException; / ** * Ejemplo de archivos de propiedades de lectura * Archivo: testProperties.java * Usuario: Leizhimin * Fecha: 2008-2-15 18:38:40 */ Public Final Class TestProperties {private static String Param1; cadena estática privada Param2; static {Propiedades prop = new Properties (); InputStream in = Object. class .getResourCeasstream ("/test.properties"); intente {prop.load (in); param1 = prop.getProperty ("inityears1") .trim (); param2 = prop.getProperty ("inityears2") .trim (); } catch (ioException e) {E.PrintStackTrace (); }} / *** Constructor privado, no se necesita ningún objeto* / 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 de ejecución:
151
152
Por supuesto, todavía está bien reemplazar objetos. Class con Int.Class. Jaja, puedes probarlo.
Además, si lee el archivo de propiedades en un método o bloque estático, hay otro método más seguro, que es obtener directamente el objeto de clase con el nombre de la clase. Por ejemplo, en este ejemplo, se puede escribir como testProperties.class. Este es el método más seguro.
2 Cómo obtener el camino:
Archivo fileB = nuevo archivo (this .getClass (). GetResource ("") .getPath ()); Sistema. out .println ("FileB Path:" + FileB);2.2 Obtenga el nombre del proyecto de la clase actual:
Sistema. out .println ("user.dir ruta:" + sistema. getProperty ("user.dir"))3. Una simple implementación de Java para obtener la ruta
/ *** Obtenga la ruta absoluta del archivo en la ruta relativa del proyecto** @param parentDir* El directorio principal del archivo de destino, por ejemplo, en el directorio del proyecto, hay directorios lib, bin y conf de Lib, bin, por lo que el programa se ejecuta en Lib o* bin, y el archivo de configuración requerido está en el rutero de la configuración absoluta* String getPath (string parentDir, string filename) {string path = null; String userDir = system.getProperty ("user.dir"); Cadena userDirName = nuevo archivo (userDir) .getName (); if (userDirName.equalSignorEcase ("lib") || userDirName.equalSignorEcase ("bin")) {archivo newf = new File (userDir); Archivo newp = nuevo archivo (newf.getParent ()); if (filename.trim (). Equals ("")) {path = newp.getPath () + file.separator + parentDir; } else {path = newp.getPath () + file.separator + parentDir + file.separator + filename; }} else {if (FileName.trim (). Equals ("")) {Path = UserDir + File.separator + ParentDir; } else {path = userDir + file.separator + parentdir + file.separator + filename; }} ruta de retorno; } 4 Use la reflexión para obtener la ruta:
InputStream IPS1 = Enumeración. class .getClassLoader () .getResourceASStream ("cn/zhao/enumstudy/testPropertIspath1.properties"); InputStream IPS2 = Enumeración. clase .getResourCeasstream ("testPropertiespath1.properties"); InputStream IPS3 = Enumeración. clase .getResourCeasstream ("Propiedades/TestPropertiesPath2.Properties");Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.