Properties类与配置文件以及路径问题

 如果经常会发生变化的数据我们可以定义在配置文件上。 比如说:数据库的用户名与密码。

Properties类对应.properties文件。文件内容是键值对,键值对之间使用"="或空格隔开。开头是"#"的表示注释

 

   Properties类在加载.properties文件时使用的iso8859-1的编码。所以这个文件中的中文要特殊处理:如果这个配置文件中有中文就必须要进行转义,使用native2ascii.exe命令操作:

native2ascii d:/my.properties d:/my2.properties

  

   使用Properties类中的load(InputStream) 方法可以加载配置文件,使用其中的store(OutputStream) 方法可以保存配置到指定文件。

 

   更多的信息可以看Properties类的API文档。

  
 配置文件的路径应该如何写 呢?
     
     绝对路径:一个文件的完整路径信息。一般绝对路径是包含有盘符 的。  绝对路径的缺陷: 因为绝对路径是有盘符开头的,有些系统是没有盘符的。
     
     相对路径: 相对路径是相对于当前程序的路径。当前路径就是执行java命令的时候,控制台所在的路径。
     
     类文件路径 :类文件路径就是使用了classpath的路径找对应的资源文件。
     
     如果需要使用到类文件路径首先先要获取到一个Class对象。

练习:使用properties读取配置文件,读取数据库的用户名、密码。并且打包成jar包。

public class DBUtil {
	
	static Properties properties = new Properties();
	
	static{
		try {
			Class clazz = DBUtil.class;
			InputStreamReader fileReader =
			new InputStreamReader(clazz.getResourceAsStream("/db.properties"));
			properties.load(fileReader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static String getUserName(){
		String userName =properties.getProperty("userName");
		return userName;
	}
	
	public static String getPassword(){
		return	properties.getProperty("password");
	}
	public static void main(String[] args) {
		System.out.println("用户名:"+ getUserName());
		System.out.println("密码: "+  getPassword());
	}
}

绝对路径

以根目录或某盘符开头的路径(或者说完整的路径)

例如:

  1. c:/a.txt (Windows操作系统中)
  2. c:/xxx/a.txt (Windows操作系统中)
  3. /var/xx/aa.txt (Linux操作系统中)

 

绝对路径的问题: 比如C:\abc\a.properties文件路径,该路径在windows上执行没有 问题,但是如果把该项目移动到linux上面执行 ,该路径就会出现问题了,因为在linux上面没有c盘的,只有根目录\。

 

相对路径

相对于当前路径的一个路径。例如当前文件夹为c:/abc时:相对路径a.txt表示c:/abc/a.txt,相对路径xx/a.txt = c:/abc/xx/a.txt

 

  1. .  表示当前文件夹
  2. .. 表示上级文件夹 

相对路径存在的问题:相对路径是相对于目前执行class文件的时候,控制台所在的路径,这样子也会导致出现问题。

Java程序中的相对路径

Java程序中使用File时写相对路径,是指相对于执行java命令时当前所在的文件夹。

Eclipse中,当前路径是工程的根目录。

classpath路径说明

在Java程序中,一般情况下使用绝对路径还是相对路径都不太合适,因为Java程序的jar包所放的位置不确定,执行java程序时当前的路径也不确定,所以不合适。

一般在Java程序中我们会把资源放到classpath中,然后使用classpath路径查找资源。

Classpath路径:就是使用classpath目前的路径。

获取classpath中的资源(InputStream)

public static void main(String[] args) throws Exception {
	Class clazz = new ClassPathTest().getClass();
	
	// 开头的'/'表示classpath的根目录,这个是表示从classpath的根目录中开始查找资源
	InputStream in = clazz.getResourceAsStream("/cn/itcast/my.properties");

	// 如果开头没有'/',表示从当前这个class所在的包中开始查找
	InputStream in2 = clazz.getResourceAsStream("my.properties");
}

 

发布了29 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_39131246/article/details/86687450
今日推荐