Método 1: Use ServletContext para ler
Obtenha o caminho real do arquivo de configuração e leia -o através do fluxo de arquivos ou use o método getReaasurceasStream ().
Como o caminho do arquivo é lido usando o ServletContext, o arquivo de configuração pode ser colocado no diretório de classes do Web-Inf ou no nível do aplicativo e no diretório Web-Inf. O desempenho específico do local de armazenamento de arquivos no projeto Eclipse é: ele pode ser colocado no SRC, ou em Web-Inf e Web-Root, etc. Como o caminho é lido e o fluxo de arquivos é usado para leitura, quaisquer arquivos de configuração podem ser lidos, incluindo XML e propriedades. Desvantagens: Não é possível ler as informações de configuração fora do servlet.
1. Primeiro, crie um projeto dinâmico de Javaweb, o diretório do projeto é o seguinte:
2. Crie um servlet (FileReader.java)
pacote com.xia.fileReader; importar java.io.fileInputStream; importar java.io.ioException; importar java.io.inputStream; importar java.io.inputStreamReader; importar java.text.messageFormat; importar java.util.properties; importar javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; classe pública FileReader estende httpServlet {private estático final serialversionuid = 1L; Void protegido Doget (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception { /*** Response.setContentType ("text /html; charset = utf-8"); O objetivo é controlar o navegador para decodificar UTF-8; * Dessa maneira, não haverá iluminado chinês*/ Response.Setheader ("Content-Type", "Text/ html; charset = utf-8"); readsrcdirPropcfgfile (resposta); // Leia o arquivo de configuração do db1.properties Response.getWriter (). println ("<hr/>"); readwebrootDirPropcfgfile (Response); // Leia o arquivo de configuração do db2.properties Response.getWriter (). println ("<hr/>"); readwebrootDirPropcfgfile (Response); // Leia o arquivo de configuração do db2.properties Response.getWriter (). println ("<hr/>"); readsrcsourcepackPropcfgfile (resposta); // Leia o arquivo de configuração do db3.properties no diretório de configuração no diretório SRC Response.getWriter (). println ("<hr/>"); readwebinfpropcfgfile (resposta); // Leia o arquivo de configuração do db4.properties no diretório JDBC no diretório web-inf} public void readsrcdirPropcfgfile (httpSerPleTroSponse) throws IoException {string = "/weBeBFFFFFFFFFFFL; InputStream in = this.getServletContext (). GetResourceasStream (caminho); Propriedades Props = new Properties (); props.load (in); String driver = props.getProperty ("jdbc.driver"); String url = props.getproperty ("jdbc.url"); String userName = props.getProperty ("jdbc.username"); String senha = props.getProperty ("jdbc.password"); Response.getWriter (). println ("Leia o arquivo de configuração do db1.properties no diretório SRC"); Response.getWriter (). println (messageFormat.format ("driver = {0}, url = {1}, nome de usuário = {2}, senha = {3}", driver, url, nome de usuário, senha)); } public void readwebrootdirpropcfgfile (httpServletResponse resposta) lança IoException {String path = "/db2.properties"; InputStream in = this.getServletContext (). GetResourceasStream (caminho); Propriedades Props = new Properties (); props.load (in); String driver = props.getProperty ("jdbc.driver"); String url = props.getproperty ("jdbc.url"); String userName = props.getProperty ("jdbc.username"); String senha = props.getProperty ("jdbc.password"); Response.getWriter (). println ("Leia o arquivo de configuração do db2.properties no diretório Webroot"); Response.getWriter (). println (messageFormat.format ("driver = {0}, url = {1}, nome de usuário = {2}, senha = {3}", driver, url, nome de usuário, senha)); } public void readsrcsourcepackpropcfgfile (httpServletResponse resposta) lança ioexception {string path = "/web-inf/classes/config/db3.properties"; String realpath = this.getServletContext (). GetRealPath (caminho); InputStreamReader Reader = new InputStreamReader (new FileInputStream (RealPath), "UTF-8"); Propriedades Props = new Properties (); props.load (leitor); String driver = props.getProperty ("jdbc.driver"); String url = props.getproperty ("jdbc.url"); String userName = props.getProperty ("jdbc.username"); String senha = props.getProperty ("jdbc.password"); Response.getWriter (). println ("Leia o arquivo de configuração do DB3.Properties no diretório de configuração no diretório SRC"); Response.getWriter (). println (messageFormat.format ("driver = {0}, url = {1}, nome de usuário = {2}, senha = {3}", driver, url, nome de usuário, senha)); } public void readwebinfpropcfgfile (httpServletResponse resposta) lança ioexception {string path = "/web-inf/jdbc/db4.properties"; String realpath = this.getServletContext (). GetRealPath (caminho); System.out.println ("RealPath:"+RealPath); System.out.println ("contextPath:"+this.getServletContext (). GetContextPath ()); InputStreamReader Reader = new InputStreamReader (new FileInputStream (RealPath), "UTF-8"); Propriedades Props = new Properties (); props.load (leitor); String driver = props.getProperty ("jdbc.driver"); String url = props.getproperty ("jdbc.url"); String userName = props.getProperty ("jdbc.username"); String senha = props.getProperty ("jdbc.password"); Response.getWriter (). Println ("Leia o arquivo de configuração do DB4.Properties no diretório JDBC no diretório Web-Inf"); Response.getWriter (). println (messageFormat.format ("driver = {0}, url = {1}, nome de usuário = {2}, senha = {3}", driver, url, nome de usuário, senha)); } Void protegido doPost (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {}}3. Configure o 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/xmls/javaee/web-web-web-web-web--/java.sun.com/xmls/javaeeeee/web-web-web-web-web-web-web-web-web-web-web-web-web-web-web-/java.sun.com/ <lame-name> javareaderfile </sisiber-name> <lorde-file-list> <lmed-File> index.html </-Welcome-File> <lorde-File> index.htm </limk -f-file> </-File-FILE> </-FILE> </-Welcome-file> <lorde-file> default.htmla <lmed-File> default.jsp </limk-fil-bile> </lipl-fil-list> <Servlet> <Servlet-name> fileReader </servlet-name> <Servlet-class> com.xia.fileReader.fileReader </servlet-class> </servlet> <vertle-mapping> <Verlet> FilleReader </class> <url-pattern>/fileReader </url-tattern> </servlet-mapping> </braque-App>
4. Teste
Método 2: Use a classe ResourceBundle para ler informações de configuração
As vantagens são: o recurso pode ser carregado em um nome de classe totalmente qualificado e lê-lo diretamente, e o arquivo de recursos pode ser lido em aplicativos que não sejam da Web.
Desvantagens: apenas arquivos de recursos na classe SRC podem ser carregados e apenas os arquivos .Properties podem ser lidos.
/** * Obtenha todos os dados no arquivo de configuração especificado * @param PropertyName * Chamada Método: * 1. Coloque o arquivo de configuração no pacote de origem do recurso sem adicionar o sufixo * PropertiesUtil.getAllMessage ("mensagem"); * 2. Coloque no pacote * PropertiesUtil.getAllMessage ("com.test.message"); * @return */ list public static <string> getAllMessage (String PropertyName) {// Obtenha o pacote de recursos ResourceBundLle rb = ResourceBundle.getBundle (PropertyName.Trim ()); // Obtenha todas as principais enumeração <String> allkey = rb.getKeys (); // Atravesse a tecla e obtenha a lista de valores <String> vallist = new ArrayList <String> (); while (allkey.hasMoreElements ()) {string key = allkey.nextElement (); String value = (string) rb.getString (chave); vallist.add (valor); } retornar Vallist; }Método 3: Use Classloader para ler informações de configuração
As vantagens são: as informações de recursos de configuração podem ser lidas em aplicativos que não são da Web e qualquer informação do arquivo de recursos pode ser lida.
Desvantagens: apenas arquivos de recursos na classe SRC são carregados e não são adequados para carregar arquivos grandes, caso contrário, causará o transbordamento da memória JVM
pacote com.xia.fileReader; importar java.io.bufferedReader; importar java.io.ioException; importar java.io.inputStream; importar java.io.inputStreamReader; importar java.util.properties; classe pública ReadByClassLoader {public static void main (string [] args) lança ioexception {readPropFileByClassLoad (); } public static void readPropFileByClassLoad () lança IoException {// Leia o arquivo de configuração db3.properties inputStream in = readbyclassloader.class.getclassloadler (). getResourceasSstream ("config/db3.properties"); BufferErader BR = new BufferredReader (new InputStreamReader (in)); Propriedades Props = new Properties (); props.load (Br); for (objeto S: props.KeySet ()) {System.out.println (s+":"+props.getProperty (s.toString ())); }}}Método 4: PropriedadesloadRutils Tool Class
/ *** PropriedadesLoaderutils fornecidos pela Spring permite carregar recursos de propriedade diretamente através do endereço do arquivo com base no caminho de classe* A maior vantagem é: carregar o arquivo de configuração em tempo real e entra em vigor imediatamente após a modificação, sem reiniciar*/ private estático void springutil () {Propriedades Propas = novas propriedades (); while (true) {try {props = PropertiesloadRutils.loadallProperties ("message.properties"); para (chave do objeto: props.KeySet ()) {System.out.print (key+":"); System.out.println (props.get (key)); }} catch (ioexception e) {System.out.println (e.getMessage ()); } tente {thread.sleep (5000);} catch (interruptedException e) {e.printStackTrace ();}}}Modificar propriedades
/** * Passe o mapa do par de valores-chave, atualize o arquivo de propriedades * * @Param FileName * Nome do arquivo (colocado no diretório do pacote de origem do recurso) e requer o sufixo * @param keyvaluemap * key-value mapa */public static updateProperties (string filename, map <string- string>> keyvalum rataluMeMAPEMAPEMAPATEMAPT) (string/stract) Informação. Quando houver chinês e espaços no caminho, ele converterá esses personagens. Dessa maneira, o resultado geralmente não é o caminho real que queremos. Aqui, o método de decodificação do URLDecoder é chamado para decodificá -lo para obter os caminhos chineses e espaciais originais. String filepath = propertiesutil.class.getClassLoader (). GetResource (nome do arquivo) .getFile (); Propriedades Props = null; BufferWriter bw = null; tente {filepath = urldecoder.decode (filepath, "utf-8"); log.debug ("UpdateProperties PropertiesPath:" + filepath); Props = PropertiesloadRutils.loadProperties (novo ClassPathResource (nome do arquivo)); log.debug ("UpdateProperties PropertiesPath:" + filepath); Props = PropertiesloadRutils.loadProperties (novo ClassPathResource (nome do arquivo)); log.debug ("updateProperties antigo:"+adereços); // grava o arquivo de propriedade BW = new BufferWriter (new OutputStreamWriter (new FileOutputStream (FilePath))); props.clear (); // limpe o arquivo antigo para (chave de string: keyvaluemap.keyset ()) props.setProperty (key, keyvaluemap.get (key)); log.debug ("UpdateProperties New:"+Props); Props.store (BW, ""); } catch (ioexception e) {log.error (e.getMessage ()); } finalmente {tente {bw.close (); } catch (ioexception e) {e.printStackTrace (); }}}Resumir
Os acima são os quatro métodos de leitura de arquivos de configuração da Javaweb que o editor apresenta a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!