java cargado de configuración atributos de archivo (propiedades del archivo) - desde la entrada hasta avanzado

¿Cuáles son las propiedades del archivo

  • Perfil de propiedades, .properties sufijo.
  • Archivo en estricta conformidad con la llave de datos = parámetros de valor para rellenar
  • China Unicode valores de los parámetros de codificación necesitan para convertir
  • No distingue entre tipos de datos básicos
  • Editado un archivo como se muestra aaa.properties
username=root
flag=true
xm =\u4f60\u597d
age=18

¿Por qué los archivos de propiedades de uso

Imagine un escenario de este tipo, cuando se publica el proyecto en línea, tales como la conexión de la necesidad de base de datos MySQL número de puerto que ser ajustado, no cambian las necesidades de código que ser reescrito, envasado, publicarla? Para algunos parámetros importantes necesitan cambiar artificialmente los argumentos a menudo utilizar un archivo de propiedades para leer, no modifique el código y terminado de modificar los parámetros, reiniciar el servidor web será capaz de alcanzar la demanda esperada, estaremos de vuelta en el archivo de propiedades de carga dinámica, incluso no requiere un reinicio.

Uso de Java para archivo de propiedades de carga de dos maneras

El uso de las cargas cargador de clases se obtiene la corriente de entrada de archivo

	@Test
	/**
	 * 使用类的加载器获得文件输入流
	 * @author CC
	 * @date 2020年3月24日
	 */
	public void demo1() throws IOException{
		Properties prop =new Properties();
		InputStream inputstream= TestProp.class.getClassLoader().getResourceAsStream("test/aaa.properties");
		prop.load(inputstream);
		String username=prop.getProperty("username");
		boolean flag=Boolean.valueOf(prop.getProperty("flag"));
		String xm=prop.getProperty("xm");
		int age =Integer.valueOf(prop.getProperty("age"));
		System.out.println( username + " " +flag+" "+xm+" "+age);		
	}

¿Necesita un poco de atención:

  • Propiedades de la clase es una clase en el paquete java.util, mientras que una clase de implementación del mapa, se puede utilizar directamente, tendrán la oportunidad de introducir!
  • Parámetros de adquisición prop.getProperty ( "llave"), se obtiene el valor del parámetro en la forma de una cadena de caracteres, la conversión de las necesidades de la demanda
  • China no requiere un manejo especial, la codificación Unicode se convertirá en chino
  • unidad Junit utilizando los siguientes resultados de la prueba:
root true 你好 123

getResourceAsStream () Introducción

de los mismos como se describe en jdk: Devuelve un flujo de entrada para leer el recurso especificado.

public InputStream getResourceAsStream(String name)

Cómo determinar que este tiempo especificado ruta del recurso?
Si se trata de proyectos de Java es relativa a la ruta de src
, tales como: ¿Hay un aaa.properties archivo ubicado en el directorio raíz de src, añadir el acceso correcto de la siguiente manera:

getResourceAsStream("aaa.properties");

Por ejemplo: ¿hay una carpeta de prueba ubicado en el directorio raíz del src, que tiene un archivo aaa.properties, añadir el acceso correcto de la siguiente manera:

getResourceAsStream("test/aaa.properties");

Cargar el archivo con un flujo de entrada de archivo

	@Test
	/**
	 * 使用标准的文件输入流读取文件
	 * @author CC
	 * @date 2020年3月24日
	 */
	public void demo2() throws IOException{
		Properties prop =new Properties();
		InputStream inputstream= new FileInputStream("src/test/aaa.properties");
		prop.load(inputstream);
		String username=prop.getProperty("username");
		boolean flag=Boolean.valueOf(prop.getProperty("flag"));
		String xm=prop.getProperty("xm");
		int age =Integer.valueOf(prop.getProperty("age"));
		System.out.println( username + " " +flag+" "+xm+" "+age);		
	}

Lo desventaja del uso de flujo de entrada de archivos es?
la ruta relativa del archivo para determinar el mal
uno: Si usted es un proyecto Java, por lo que puede acceder a:

 new FileInputStream("src/test/aaa.properties");

Dos: Si usted es un proyecto web, que sabemos que funciona en el Tomcat Webapps hay camino src, todos los archivos src se compilan en la carpeta WEB-INF en las clases inferiores, es claramente anterior se informó este acceso excepción FileNotFound

El tipo de archivo de propiedades de carga dinámica sin reiniciar

Escena: proyecto web ya publicado, quiero modificar los parámetros no quieren reiniciar cómo hacerlo? Lo anterior forma convencional usando un cargador de clases se obtiene flujo de entrada, tiene las siguientes desventajas:
Después de modificar .properties, incluso cuando re-ejecutado, los parámetros de lectura antes de restos de modificación. Después de que la causa de este problema es que ClassLoader.getResourceAsStream leer, .properties se almacenarán en la memoria caché, se lee de la memoria caché cuando se vuelve a ejecutar, en lugar de leer el archivo de nuevo los .properties

Uso FileInputStream adquirió desde el disco cada vez que la ruta absoluta de los atributos de archivo, que puede resolver los inconvenientes antes mencionados, pero lo que se necesita para obtener una ruta absoluta a un archivo?

		Properties prop =new Properties();
		//InputStream inputstream= ImgCheckServlet.class.getClassLoader().getResourceAsStream("aaa.properties");
		//获取绝对路径
		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
		System.out.println(path);
		InputStream inputstream= new FileInputStream(path+"/aaa.properties");
		prop.load(inputstream);
		String username=prop.getProperty("username");
		boolean flag=Boolean.valueOf(prop.getProperty("flag"));
		String xm=prop.getProperty("xm");
		int age =Integer.valueOf(prop.getProperty("age"));
		System.out.println( username + " " +flag+" "+xm+" "+age);

Se puede ver en una llamada de servlet bajo el efecto de la web del proyecto: por ejemplo, tratamos de cambio de edad = 123, la consola puede ver el efecto de la siguiente manera, con efecto inmediato

root true 你好 123
Publicado 33 artículos originales · alabanza won 40 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/cchulu/article/details/105084003
Recomendado
Clasificación