Método 1: use servletContext para leer
Obtenga el RealPath del archivo de configuración y luego léelo a través de la transmisión del archivo o use el método GetreaAsurCeasstream ().
Debido a que la ruta del archivo se lee utilizando ServletContext, el archivo de configuración se puede colocar en el directorio de clases de Web-INF, o en el nivel de aplicación y el directorio web-INF. El rendimiento específico de la ubicación de almacenamiento de archivos en el proyecto Eclipse es: se puede colocar en SRC, o en Web-INF y Web-Root, etc. Debido a que la ruta se lee y la secuencia de archivos se usa para leer, se puede leer cualquier archivo de configuración, incluidos XML y propiedades. Desventajas: no se puede leer información de configuración fuera del servlet.
1. Primero cree un proyecto dinámico de Javaweb, el directorio del proyecto es el siguiente:
2. Cree un servlet (FileReader.java)
paquete com.xia.filreader; import java.io.fileInputStream; import java.io.ioException; import java.io.inputstream; import java.io.inputstreamreader; import java.text.messageformat; import java.util.properties; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; Public Class FileReader extiende httpservlet {private static final long SerialVersionUid = 1l; Doget vacío protegido (httpservletRequest, respuesta httpServletResponse) arroja servletException, ioexception { /*** respuesta.setContentType ("text /html; charset = utf-8"); El propósito es controlar el navegador para decodificar UTF-8; * De esta manera, no habrá chino confundido*/ respuesta. ReadSrcDirPropcfgFile (respuesta); // Lea la respuesta del archivo de configuración DB1.Properties.getWriter (). println ("<hr/>"); ReadWebrootDirPropcfgFile (respuesta); // Leer el archivo de configuración db2.Properties respuesta.getWriter (). println ("<hr/>"); ReadWebrootDirPropcfgFile (respuesta); // Leer el archivo de configuración db2.Properties respuesta.getWriter (). println ("<hr/>"); ReadSrcSourCePackPropCfgFile (respuesta); // Lea el archivo de configuración DB3.Properties en el directorio de configuración en el directorio SRC Respuesta.getWriter (). println ("<hr/>"); ReadWebinfPropcfgFile (respuesta); // Lea el archivo de configuración DB4.Properties en el directorio JDBC en el directorio web-INF} public void ReadsrcdirPropcfgFile (httpServletResponse Respuesta) lanza IOException {string ruta = "/webinf/classes/db1.properties"; InputStream in = this.getServletContext (). GetResourceasStream (ruta); Propiedades Props = New Properties (); Props.Load (in); String Driver = props.getProperty ("jdbc.driver"); Cadena url = props.getProperty ("jdbc.url"); String UserName = props.getProperty ("jdbc.username"); Cadena contraseña = props.getProperty ("jdbc.password"); Response.getWriter (). println ("Lea el archivo de configuración DB1.Properties en el directorio SRC"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, username = {2}, contraseña = {3}", controlador, url, nombre de usuario, contraseña)); } public void ReadWebrootDirPropcfgfile (httpservletResponse respuesta) lanza ioexception {string path = "/db2.properties"; InputStream in = this.getServletContext (). GetResourceasStream (ruta); Propiedades Props = New Properties (); Props.Load (in); String Driver = props.getProperty ("jdbc.driver"); Cadena url = props.getProperty ("jdbc.url"); String UserName = props.getProperty ("jdbc.username"); Cadena contraseña = props.getProperty ("jdbc.password"); Response.getWriter (). println ("Lea el archivo de configuración DB2.Properties en el directorio de Webroot"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, username = {2}, contraseña = {3}", controlador, url, nombre de usuario, contraseña)); } public void ReadSrcSourCePackPropcfgfile (httpServletResponse Respuesta) arroja ioexception {string path = "/web-inf/classes/config/db3.properties"; String realPath = this.getServletContext (). GetRealPath (ruta); InputStreamReader Reader = new InputStreamReader (new FileInputStream (RealPath), "UTF-8"); Propiedades Props = New Properties (); Props.Load (lector); String Driver = props.getProperty ("jdbc.driver"); Cadena url = props.getProperty ("jdbc.url"); String UserName = props.getProperty ("jdbc.username"); Cadena contraseña = props.getProperty ("jdbc.password"); Response.getWriter (). println ("Lea el archivo de configuración db3.properties en el directorio de configuración en el directorio SRC"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, username = {2}, contraseña = {3}", controlador, url, nombre de usuario, contraseña)); } public void ReadwebinfPropcfgFile (httpservletResponse respuesta) lanza ioexception {string path = "/webinf/jdbc/db4.properties"; String realPath = this.getServletContext (). GetRealPath (ruta); System.out.println ("RealPath:"+RealPath); System.out.println ("contextPath:"+this.getServletContext (). GetContextPath ()); InputStreamReader Reader = new InputStreamReader (new FileInputStream (RealPath), "UTF-8"); Propiedades Props = New Properties (); Props.Load (lector); String Driver = props.getProperty ("jdbc.driver"); Cadena url = props.getProperty ("jdbc.url"); String UserName = props.getProperty ("jdbc.username"); Cadena contraseña = props.getProperty ("jdbc.password"); Response.getWriter (). println ("Lea el archivo de configuración DB4.Properties en el directorio JDBC en el directorio web-INF"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, username = {2}, contraseña = {3}", controlador, url, nombre de usuario, contraseña)); } protegido void dopost (solicitud httpservletrequest, respuesta httpservletreponse) lanza ServletException, ioexception {}}3. Configurar servlet (web.xml)
<? xml versión = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" " xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" <Sclawname> JavaraaderFile </splay-Name> <Welcome-File-List> <Devenga-File> Index.html </Welcome-File> <Devene-File> Index.htm </leadde-file> <calle-file> index.jsp </Welcome-File> <DEEVEDFILE> Default.html </Welcome-File> <Daultion> Default.htm <//File >-File> <velceed-file> default.jsp </le bienvenido> </bienvenido-file-list> <ervlet> <servlet-name> fileReader </servlet-name> <ervlet-class> com.xia.filereader.filereader </servlet-class> </servlet> <ervlet-mapping> <ervlet-name> filereader </servlet-name> <URL-Pattern>/FileReader </url-Pattern> </servlet-mapping> </beb-app>
4. Prueba
Método 2: Use la clase de recursos de recursos para leer la información de configuración
Las ventajas son: el recurso se puede cargar en un nombre de clase totalmente calificado y leerlo directamente, y el archivo de recursos se puede leer en aplicaciones no WEB.
Desventajas: solo se pueden cargar archivos de recursos en la clase SRC y solo se pueden leer los archivos.
/** * Obtenga todos los datos en el archivo de configuración especificado * @Param Propertyname * Método de llamada: * 1. Coloque el archivo de configuración en el paquete de origen de recursos sin agregar el sufijo * PropertiesUtil.getAllMessage ("Mensaje"); * 2. Coloque en el paquete * PropertiesUtil.getAllMessage ("com.test.message"); * @return */ public static list <String> getAllMessage (String PropertyName) {// Obtener el paquete de recursos ResourceBundle rb = ResourceBundle.getBundle (Propertyname.trim ()); // Obtener toda la enumeración de la tecla <String> AllKey = rb.getKeys (); // atraviesa la clave y obtiene la lista de valores <String> vallist = new ArrayList <String> (); while (allkey.hasmoreelements ()) {string key = allkey.nextelement (); String value = (string) rb.getString (clave); vallist.add (valor); } return vallist; }Método 3: Use el cargador de clases para leer la información de configuración
Las ventajas son: la información de recursos de configuración se puede leer en aplicaciones que no son WEB, y se puede leer cualquier información del archivo de recursos.
Desventajas: solo se cargan los archivos de recursos en la clase SRC y no son adecuados para cargar archivos grandes, de lo contrario causará el desbordamiento de la memoria JVM
paquete com.xia.filreader; import java.io.bufferedReader; import java.io.ioException; import java.io.inputstream; import java.io.inputstreamreader; import java.util.properties; public class ReadbyClassLoader {public static void main (string [] args) lanza ioexception {readPropFileByClassLoad (); } public static void readPropfileByClassLoad () lanza ioexception {// lee el archivo de configuración db3.properties inputStream in = readByClassLoader.class.getClassLoader (). GetResourCeaseStream ("config/db3.properties"); BufferedReader BR = New BufferedReader (new InputStreamReader (in)); Propiedades Props = New Properties (); Props.Load (BR); for (objeto s: props.KeySet ()) {System.out.println (S+":"+props.getProperty (s.ToString ())); }}}Método 4: Clase de herramientas de propiedad de propiedades de propiedad
/ *** PropertiesLoaderUtils proporcionado por Spring le permite cargar recursos de propiedades directamente a través de la dirección de archivo en función de la classpath* La mayor ventaja es: cargar el archivo de configuración en tiempo real, y entra en vigencia inmediatamente después de la modificación, sin reiniciar*/ privado void springutil () {Propiedades props = new Properties (); while (true) {try {props = PropertiesLoaderUtilss.loadAllProperties ("Message.Properties"); for (clave de objeto: props.KeySet ()) {System.out.print (Key+":"); System.out.println (props.get (key)); }} catch (ioException e) {System.out.println (E.GetMessage ()); } try {Thread.sleep (5000);} Catch (InterruptedException e) {E.PrintStackTraceModificar propiedades
/** * Pase el mapa del par de valores clave, actualice el archivo de propiedades * * @param nombre de archivo * nombre * (colocado en el directorio de paquetes de origen de recursos) y requiere el sufijo * @param keyValueMap * key-value Información de ruta. Cuando hay chinos y espacios en el camino, convertirá estos personajes. De esta manera, el resultado a menudo no es el camino real que queremos. Aquí, se llama al método de decodificación de UrlDecoder para decodificarlo para obtener las rutas originales chinas y espaciales. String filePath = PropertiesUtil.class.getClassLoader (). GetResource (nombre de archivo) .getFile (); Propiedades Props = NULL; BufferedWriter bw = null; intente {filePath = urlDecoder.Decode (filePath, "utf-8"); log.debug ("UpdateProperties PropertiesPath:" + FilePath); Props = PropertiesLoaderUtilss.LoadProperties (new ClassPathResource (nombre de archivo)); log.debug ("UpdateProperties PropertiesPath:" + FilePath); Props = PropertiesLoaderUtilss.LoadProperties (new ClassPathResource (nombre de archivo)); log.debug ("updateProperties antiguo:"+accesorios); // Escribir archivo de propiedad bw = new BufferedWriter (nuevo OutputStreamWriter (nuevo FileOutputStream (FilePath))); propss.clear (); // borrar el archivo anterior para (clave de cadena: keyValueMap.KeySet ()) Props.SetProperty (Key, KeyValueMap.get (Key)); log.debug ("UpdateProperties new:"+Props); Props.Store (BW, ""); } catch (ioException e) {log.error (e.getMessage ()); } finalmente {try {bw.close (); } catch (ioException e) {E.PrintStackTrace (); }}}Resumir
Los anteriores son los cuatro métodos de lectura de archivos de configuración de Javaweb que el editor le presenta. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!