Acerca de la clase de propiedades en el paquete Util

breve introducción

Recientemente, me encontré con la situación de usar la clase Propiedades para leer y escribir archivos de configuración para IO en mi trabajo, por lo que me interesé en este tipo.Después de estudiar en línea, vengo aquí para resumir. Primero veamos un poco de código fuente

public class Properties extends Hashtable<Object,Object> {
    /**
     * use serialVersionUID from JDK 1.1.X for interoperability
     */
    @java.io.Serial
    private static final long serialVersionUID = 4112578634029874840L;

    private static final Unsafe UNSAFE = Unsafe.getUnsafe();

Puede ver que esta clase hereda de HashTable<k,v> y, por supuesto, implementa la interfaz Map<k,v>, por lo que puede usarse como un mapa, y también es un conjunto de dos columnas, donde k y v son de tipo cadena de caracteres. Tomemos un ejemplo para demostrar las propiedades de colección de Propiedades

@Test
    void contextLoads() {
        Properties prop = new Properties();
        prop.put("name","Superman");
        prop.put("age",18);
        System.out.println(prop.toString());
        prop.clear();
        System.out.println(prop.toString());
    }

Veamos la salida

Puede ver que la colección se almacena en forma de clave-valor. La escena de propiedades más utilizada es definitivamente el archivo de configuración .properties.Veamos si esta clase puede leer el archivo de configuración.

 @Test
    void contextLoads() {
        File file = new File("src/main/resources/demo.properties");
        File file1 = new File("src/main/resources/demo1.yml");
        Properties properties = new Properties();
        try(FileInputStream fileInputStream = new FileInputStream(file);
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"))
        {
            properties.load(inputStreamReader);//读取输入字符流
            System.out.println(properties);
            System.out.println(properties.getProperty("name"));
        }catch (FileNotFoundException | UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

Los dos archivos de configuración son los siguientes:

Echemos un vistazo a los resultados de leer los dos archivos de configuración por separado.

Podemos ver que el parámetro del método de carga se puede pasar al lector Reader del flujo de caracteres de entrada, y también se puede pasar al flujo de bytes de entrada InputStream inputStream. son todos legibles. Veamos otro método de esta clase, el método replace

File file = new File("src/main/resources/demo.properties");
        File file1 = new File("src/main/resources/demo1.yml");
        Properties properties = new Properties();
        try(FileInputStream fileInputStream = new FileInputStream(file);
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"))
        {

            properties.load(inputStreamReader);
            System.out.println(properties);
            System.out.println(properties.getProperty("name"));
            properties.replace("name","SpiderMan","yang");
            System.out.println(properties);

        } catch (FileNotFoundException | UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

Veamos los resultados:

Se puede ver que las propiedades en la colección de propiedades han cambiado, pero si queremos modificar el archivo de configuración, no solo leeremos, sino que también escribiremos en el disco duro, ¿es posible? Agregamos el siguiente código:

try {
            final FileOutputStream fileOutputStream = new FileOutputStream(file);
            properties.store(fileOutputStream,"change");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

mira los resultados

La salida no ha cambiado, mire los archivos fuente en recursos

Se puede ver que se ha modificado, y también hay un comentario cuando se realiza la modificación. La clase Propiedades en realidad tiene muchas otras aplicaciones, básicamente todo sobre archivos de configuración. Por ejemplo, podemos usar el método getProperties de System para obtener toda la información de parámetros de la JVM actual e imprimirla en la consola. El código de ejemplo relevante es el siguiente:

@SpringBootTest
public class JVMPropertiesTest {
    @Test
    void testDemo(){
        Properties properties = System.getProperties();
        properties.list(System.out);
    }
}

Información de visualización relacionada:

Todavía hay muchos parámetros que no están recortados. Podemos usar la secuencia para generar el documento para una fácil visualización.

Lo anterior es lo que he aprendido sobre esta clase hasta ahora, y lo compartiré con ustedes.

Supongo que te gusta

Origin blog.csdn.net/Lee_92/article/details/128658984
Recomendado
Clasificación