java读取配置文件properties_Java读取properties配置文件

本文介绍如何在Java中读取properties配置文件,通过ServletContext和ClassLoader获取输入流,使用Properties类加载配置,并处理可能出现的编码问题。示例代码展示了读取配置文件并输出其内容的过程。
摘要由CSDN通过智能技术生成

1 importjava.io.BufferedReader;2 importjava.io.IOException;3 importjava.io.InputStream;4 importjava.io.InputStreamReader;5 importjava.io.UnsupportedEncodingException;6 importjava.util.Enumeration;7 importjava.util.Iterator;8 importjava.util.Properties;9 importjava.util.Set;10

11 importjavax.servlet.ServletContext;12 importjavax.servlet.ServletException;13 importjavax.servlet.annotation.WebServlet;14 importjavax.servlet.http.HttpServlet;15

16 @WebServlet(urlPatterns={"/PropertiesServlet"},loadOnStartup=1)17 public class PropertiesServlet extendsHttpServlet {18

19 private static final long serialVersionUID = 1L;20

21 publicPropertiesServlet() {22 super();23 }24

25 public void init()throwsServletException{26

27 //获取 ServletContext

28 ServletContext context = this.getServletContext();29 //获取 ServletConfig30 //ServletConfig servletConfig = this.getServletConfig();31

32 //获取所有初始化参数的名称

33 Enumeration enumer =context.getInitParameterNames();34 //Enumeration initParameterNames = servletConfig.getInitParameterNames();//同样是获取所有初始化参数的名称35 //enumer = initParameterNames;

36

37 while(enumer.hasMoreElements()) {38 String name =enumer.nextElement();39 String value = context.getInitParameter(name);//通过参数名获取参数值

40 System.out.println(name + ":" +value);41 }42

43

44 //通过 ServletContext 获取资源文件输入流 InputStream 的三种方式45 //URL url = context.getResource("WEB-INF/classes/jdbc.properties");46 //InputStream is1 = url.openStream();47

48 //String path = context.getRealPath("WEB-INF/classes/jdbc.properties");49 //File file = new File(path);50 //InputStream is2 = new FileInputStream(file);

51

52 InputStream is3 = context.getResourceAsStream("WEB-INF/classes/jdbc.properties");//方便53

54 //获取 ClassLoader 的三种方式55 //ClassLoader classLoader1 = this.getClass().getClassLoader();56 //ClassLoader classLoader2 = Thread.currentThread().getContextClassLoader();57 //ClassLoader classLoader3 = ClassLoader.getSystemClassLoader();58

59 //通过 ClassLoader 获取 InputStream60 //InputStream is = classLoader3.getResourceAsStream("jdbc.properties");61

62 //InputStream is4 = ClassLoader.getSystemResourceAsStream("jdbc.properties");//方便

63

64 Properties prop = newProperties();65

66 //Java在网络传输中使用的编码是"ISO-8859-1",如果配置文件有中文,可能出现乱码问题67 //解决方案:1.native2ascii.exe将中文转成Unicode编码;2.将InputStream封装成Reader68 //InputStream字节流无法读取中文,把InputStream转换成Reader字符流,将字节解码为字符来读取中文

69 InputStreamReader isr = null;70 try{71 isr = new InputStreamReader(is3, "UTF-8");72 } catch(UnsupportedEncodingException e) {73 e.printStackTrace();74 }75 //其中UTF-8,用于明确指定解码字符流的字符集76 //不指定则默认使用OS的,这会造成同一份配置文件同一份代码,在linux和windows上、英文windows和中文windows之间的表现都不一致77 //这个参数应该和具体读取的properties文件的编码格式匹配78

79

80 //建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)81 //如果不缓冲的话会通过read方法一次又一次的访问文件

82 BufferedReader bf = newBufferedReader(isr);83

84 //将内容读到 Properties 里

85 try{86 prop.load(bf);87 } catch(IOException e) {88 //TODO Auto-generated catch block

89 e.printStackTrace();90 }91

92 String user = prop.getProperty("姓名");93 System.out.println(user);94

95 //获取所有Property 的 Name

96 Set set =prop.stringPropertyNames();97 Iterator it =set.iterator();98 while(it.hasNext()) {99 String name =it.next();100 String value = prop.getProperty(name);//通过name获取value

101 System.out.println(name + ":" +value);102 }103 }104 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值