Méthode 1: Utilisez ServletContext pour lire
Obtenez le RealPath du fichier de configuration, puis lisez-le via le flux de fichiers ou utilisez la méthode getReaAsUrceSstream ().
Étant donné que le chemin du fichier est lu à l'aide de ServletContext, le fichier de configuration peut être placé dans le répertoire des classes de Web-Inf, ou dans le niveau d'application et le répertoire Web-Inf. Les performances spécifiques de l'emplacement de stockage de fichiers dans le projet Eclipse sont: elle peut être placée sous SRC, ou sous le Web-Inf et ROOT Web, etc. Parce que le chemin est lu et que le flux de fichiers est utilisé pour la lecture, tous les fichiers de configuration peuvent être lus, y compris XML et propriétés. Inconvénients: Impossible de lire les informations de configuration à l'extérieur du servlet.
1. Créez d'abord un projet Javaweb dynamique, le répertoire du projet est le suivant:
2. Créez un servlet (fileReader.java)
package com.xia.fileReader; import java.io.fileInputStream; Importer java.io.ioException; import java.io.inputStream; Importer java.io.inputStreamReader; import java.text.messageFormat; import java.util.properties; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; classe publique FileReader étend httpServlet {private static final long SerialVersionUID = 1l; Protected void doGet (requête HttpServletRequest, réponse httpservletResponse) lève Servlexception, ioException {/ ** * Response.SetContentType ("text / html; charset = utf-8"); Le but est de contrôler le navigateur pour décoder UTF-8; * De cette façon, il n'y aura pas de chinois brouillé * / Response.sethEader ("Content-Type", "Text / Html; charSet = UTF-8"); readsrcdirPropcfgFile (réponse); // Lisez le fichier de configuration db1.properties Response.getWriter (). println ("<hr />"); readwebrootdirPropcfgFile (réponse); // Lisez le fichier de configuration DB2.Properties Response.getWriter (). println ("<hr />"); readwebrootdirPropcfgFile (réponse); // Lisez le fichier de configuration DB2.Properties Response.getWriter (). println ("<hr />"); readsrcSourcePackPropcfgFile (réponse); // Lisez le fichier de configuration DB3.Properties dans le répertoire de configuration sous le répertoire SRC Response.getWriter (). Println ("<hr />"); readwebinfpropcfgFile (réponse); // Lisez le fichier de configuration DB4.Properties dans le répertoire JDBC sous le répertoire Web-Inf} public void readsrcdirPropcfgFile (HttpServletResponse réponse) lance ioexception {string path = "/web-inf-fffrasses/db1.properties"; InputStream dans = this.getServletContext (). GetResourceSstream (path); Properties props = news properties (); Prophes.load (in); String Driver = props.getProperty ("jdbc.Driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.Username"); String mot de passe = props.getProperty ("jdbc.password"); réponse.getwriter (). println ("Lire le fichier de configuration db1.properties dans le répertoire SRC"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, nom d'utilisateur = {2}, mot de passe = {3}", pilote, url, nom d'utilisateur, mot de passe)); } public void readwebrootdirpropcfgFile (réponse httpsservletResponse) lève ioException {String path = "/db2.properties"; InputStream dans = this.getServletContext (). GetResourceSstream (path); Properties props = news properties (); Prophes.load (in); String Driver = props.getProperty ("jdbc.Driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.Username"); String mot de passe = props.getProperty ("jdbc.password"); réponse.getwriter (). println ("Lire le fichier de configuration db2.properties dans le répertoire webroot"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, nom d'utilisateur = {2}, mot de passe = {3}", pilote, url, nom d'utilisateur, mot de passe)); } public void readsrcsourcepackpropcfgfile (réponse httpServletResponse) lève ioException {String path = "/web-inf/classes/config/db3.properties"; String realPath = this.getServletContext (). GetRealPath (path); InputStreamReader Reader = new inputStreamReader (new FileInputStream (realPath), "UTF-8"); Properties props = news properties (); Prophes.load (lecteur); String Driver = props.getProperty ("jdbc.Driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.Username"); String mot de passe = props.getProperty ("jdbc.password"); réponse.getwriter (). println ("Lire le fichier de configuration DB3.Properties dans le répertoire de configuration sous le répertoire SRC"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, nom d'utilisateur = {2}, mot de passe = {3}", pilote, url, nom d'utilisateur, mot de passe)); } public void readwebinfpropcfgFile (réponse httpservletResponse) lève ioException {String path = "/web-inf/jdbc/db4.properties"; String realPath = this.getServletContext (). GetRealPath (path); System.out.println ("realPath:" + realPath); System.out.println ("contextPath:" + this.getServletContext (). GetContextPath ()); InputStreamReader Reader = new inputStreamReader (new FileInputStream (realPath), "UTF-8"); Properties props = news properties (); Prophes.load (lecteur); String Driver = props.getProperty ("jdbc.Driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.Username"); String mot de passe = props.getProperty ("jdbc.password"); Response.getWriter (). Println ("Lisez le fichier de configuration DB4.Properties dans le répertoire JDBC sous le répertoire Web-Inf"); Response.getWriter (). println (MessageFormat.Format ("Driver = {0}, url = {1}, nom d'utilisateur = {2}, mot de passe = {3}", pilote, url, nom d'utilisateur, mot de passe)); } Protected void doPost (HttpServLetRequest Request, HttpServletResponse Response) lève ServletException, ioException {}}3. Configurer le servlet (web.xml)
<? xml version = "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" id = "webapp_id =" 3.0 " <splay-name> javareaderFile </ display-name> <ven wencelfile-list> <leen welcome-file> index.html </ bienvenue-file> <ven welcome-file> index.htm </ welcome-file> <ven welcome-file> index.jsp </venke-file> <leen welcome> wreenlow-file> <Leloy-File> Default.jsp </ Welcome-File> </ Welcome-File-List> <Serplet> <Serplet-Name> FileReader </ Servlet-Name> <Serplet-Class> com.xia.fileReader.fileReader </ Servlet-Class> </ Servlet> <Servlet-Mapping> <Serplet-Name> FileReder </vilt-Name> <URL-Pattern> / FileReader </ URL-Pattern> </ Servlet-Mapping> </ Web-App>
4. Test
Méthode 2: Utilisez la classe ResourceBundle pour lire les informations de configuration
Les avantages sont: la ressource peut être chargée dans un nom de classe entièrement qualifié et la lire directement, et le fichier de ressources peut être lu dans des applications non Web.
Inconvénients: seuls les fichiers de ressources sous la classe SRC peuvent être chargés et seuls les fichiers .properties peuvent être lus.
/ ** * Obtenez toutes les données dans le fichier de configuration spécifié * @param PropertyName * Méthode d'appel: * 1. Placez le fichier de configuration sous le package source de ressource sans ajouter le suffixe * PropertiesUtil.getAllMessage ("Message"); * 2. Placer dans le package * PropertiesUtil.getAllMessage ("com.test.message"); * @return * / public static list <string> getAllMessage (String PropertyName) {// Obtenez le package de ressources ResourceBundle RB = ResourceBundle.getBundle (propriétéName.trim ()); // obtient toutes les clés énumération <string> allkey = rb.getkeys (); // Traversé la touche et obtenir la liste de valeur <string> vallist = new ArrayList <string> (); while (allKey.HasmoreElements ()) {String key = allKey.NextElement (); String Value = (String) rb.getString (key); vallist.add (valeur); } return Vallist; }Méthode 3: Utilisez Classloader pour lire les informations de configuration
Les avantages sont: les informations sur les ressources de configuration peuvent être lues dans les applications non Web, et toutes les informations de fichier de ressources peuvent être lues.
Inconvénients: seuls les fichiers de ressources sous la classe SRC sont chargés et ne conviennent pas pour charger des fichiers volumineux, sinon cela entraînera un débordement de mémoire JVM
package com.xia.fileReader; Importer java.io.bufferedReader; Importer java.io.ioException; import java.io.inputStream; Importer java.io.inputStreamReader; import java.util.properties; classe publique ReadByClassOLODOFer {public static void main (String [] args) lève ioException {readPropFileByClassload (); } public static void readPropFileByClassload () lève ioException {// lire le fichier de configuration db3.properties inputStream dans = readByClassLoader.class.getClassLoader (). getResourCeasStream ("config / db3.properties"); BufferedReader br = new BufferedReader (new InputStreamReader (IN)); Properties props = news properties (); Prophes.load (br); pour (objet s: props.KeySet ()) {System.out.println (s + ":" + props.getProperty (s.ToString ())); }}}Méthode 4: Classe d'outils PropertiesLoDokeUtils
/ ** * PropertiesLoDoLerUtils fourni par Spring vous permet de charger les ressources de propriété directement via l'adresse de fichier en fonction du CLASSPATH * Le plus grand avantage est: Chargez le fichier de configuration en temps réel, et il prend effet immédiatement après la modification, sans redémarrer * / Private Static void SpringUtil () {Properties props = nouvelles propriétés (); while (true) {try {props = PropertiesLoDeRutils.LoadallProperties ("Message.Properties"); for (object key: props.KeySet ()) {System.out.print (key + ":"); System.out.println (props.get (key)); }} catch (ioException e) {System.out.println (e.getMessage ()); } essayez {thread.sleep (5000);} catch (InterruptedException e) {e.printStackTrace ();}}}Modifier les propriétés
/ ** * Passez la carte de la paire de valeurs de clé, mettez à jour le fichier Propriétés * * @param nom de fichier * nom du fichier (placé dans le répertoire de package source de ressources) et nécessite le suffixe * @param keyvalumap * la paire de valeurs clés * / public static void updateProperties (String FileName, map <string, string> keyvaluemap) {// la méthode GetResource utilise utf. pour y keyvalumap) {// la méthode GetResource utilise utf. pour y keyvalumap) {// la méthode GetResource utilise utf. pour y clés de clés) {// la méthode GetResource Us Informations sur le chemin. Lorsqu'il y a du chinois et des espaces sur le chemin, il convertira ces personnages. De cette façon, le résultat n'est souvent pas le vrai chemin que nous voulons. Ici, la méthode de décodage d'UrlldEcoder est appelée pour la décoder pour obtenir les chemins chinois et spatiaux d'origine. String filepath = PropertiesUtil.class.getClassloader (). GetResource (filename) .getFile (); Propriétés props = null; BufferedWriter bw = null; try {filepath = urlDecOder.decode (filepath, "utf-8"); Log.Debug ("UpdateProperties PropertiesPath:" + filepath); PropS = PropertiesLoDoDerUtils.LoadProperties (new ClassPathResource (nom de fichier)); Log.Debug ("UpdateProperties PropertiesPath:" + filepath); PropS = PropertiesLoDoDerUtils.LoadProperties (new ClassPathResource (nom de fichier)); log.debug ("updateProperties old:" + accessoires); // Écrivez le fichier de propriété BW = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (filepath))); props.clear (); // effacer l'ancien fichier pour (clé de chaîne: keyvalumap.keyset ()) props.setProperty (key, keyvalumap.get (key)); log.debug ("updateProperties new:" + accessoires); Prophes.store (bw, ""); } catch (ioException e) {log.Error (e.getMessage ()); } enfin {try {bw.close (); } catch (ioException e) {e.printStackTrace (); }}}Résumer
Ce qui précède est les quatre méthodes de lecture des fichiers de configuration de Javaweb que l'éditeur vous présente. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!