欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中动态的读取src下面的配置文件,动态的读取同个包下面的配置文件。

程序员文章站 2022-06-02 13:57:09
...

有时候我们要读取src文件下的文件。这时就要知道文件的路径。

一种方法是显示的给出文件的路径。

例如:PrintProperties.printProperties("D:\\dev\\workspase2Spring\\MyCommit\\src\\b.properties");

这样在本机运行运行起来是可以的。

另一种方法是动态的获取路径,读取src下的配置文件

这里我写了个工具类来获取src路径。

工程目录:

java中动态的读取src下面的配置文件,动态的读取同个包下面的配置文件。

配置文件b.properties中的内容:

lan=123
blue=234
green=2345
red=456

工具类:得到src目录下文件的路径

package com.lan.Properties;

public class FilePathInSrcAfterRun
{
	/*String path=
			MySrcFileLocationAfterCompile.class.getClassLoader().getResource("").toString();
	编译之后src目录下面的文件,会在bin目录中,
	bin下的文件或者文件夹与src下的文件或者文件夹一一对应
	System.out.println("src目录下的文件经过编译后的位置:"+path);*/
	public String getFilePathInSrcAfterRun()
	{
		String path = this.getClass().getClassLoader().getResource("").toString();
		// System.out.println("编译后src路径:"+path);//file:/D:/dev/workspase2Spring/XMLreader/bin/
		int m = path.indexOf("/");// file:/<----点位到file:后面的反斜杠
		path = path.substring(m + 1);// 从反斜杠之后的一位开始截取字符串
		// System.out.println("编译后src路径:"+path);
		return path;
	}
}
工具类:打印配置文件

package com.lan.Properties;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class PrintProperties
{
	public static void printProperties(String filePath)
	{
		Properties properties=new Properties();
    	//新建一个配置文件类型。这个类型是一个键值对列表,类似于Map ,
    	//Properties类实现了Map接口
    	//Properties相当于只能存放String类型的键值对的Map集合
    	
    	
    	try
		{
    		InputStream inStream=new BufferedInputStream(
    				new FileInputStream(filePath));
			properties.load(inStream);
			Set<String> keys=properties.stringPropertyNames();
	    	//取出所有的键,作为键的Set集合
	    	for(Iterator<String> it=keys.iterator();it.hasNext();)
	    	{
	    		String key=it.next();//取出下一个键key
	    		String value=properties.getProperty(key);
	    		//通过键从a.properties(相当于键值对Set集合)中取出value
	    		System.out.println("key=\t"+key+"\tvalue="+value);
	    	}
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

测试:

package com.lan.Properties;

public class FilePathInSrcAfterRunTest
{
    public static void main(String[] args)
    {
        String path=new FilePathInSrcAfterRun().getFilePathInSrcAfterRun();
        System.out.println("编译之后的src路径:"+path);
        String filePath=path+"b.properties";
        System.out.println("编译之后src下的文件路径:"+filePath);
        //打印配置文件
        PrintProperties.printProperties(filePath);
        System.out.println("---------------------------------------");
        //使用显示路径:D:\dev\workspase2Spring\MyCommit\src\b.properties
        PrintProperties.printProperties("D:\\dev\\workspase2Spring\\MyCommit\\src\\b.properties");
    }
}
运行结果:

编译之后的src路径:D:/dev/workspase2Spring/MyCommit/bin/
编译之后src下的文件路径:D:/dev/workspase2Spring/MyCommit/bin/b.properties
key=	blue	value=234
key=	lan	value=123
key=	green	value=2345
key=	red	value=456
---------------------------------------
key=	blue	value=234
key=	lan	value=123
key=	green	value=2345
key=	red	value=456
可以看到这两种方法都能读取src下面的b.properties配置文件。

但第二种方法就比较灵活,就算工程路径改变了,只要b.properties配置文件还在src目录下面,就可以读取它。

第一种方法,每次改变工程路径,都要再次改变一下文件的路径

这里再来介绍读取同个包下面的配置文件的方法

配置文件a.properties中的内容:(乱写的一些东西)

bule=lan
lan=bule
green=yes
yes=green
工具类:

package com.lan.Properties;

public class FilePathInPakageAfterRun
{
	public String ThisPackagePath()
	{
		String thisPackagePath=this.getClass().getResource("").toString();
//		System.out.println("路径:"+thisPackagePath);
		int m=thisPackagePath.indexOf("/");//去掉前面的file:
		thisPackagePath=thisPackagePath.substring(m+1);
//		System.out.println("路径:"+thisPackagePath);
		return thisPackagePath;//返回当前包返回的路径。
	}
}
测试:

package com.lan.Properties;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class FilePathInPakageAfterRunTest
{
    public static void main(String[] args)
    {
        String thisPackagePath=new FilePathInPakageAfterRun().ThisPackagePath();
        System.out.println("当前包编译后的路径为:"+thisPackagePath);
        String filePath=thisPackagePath+"a.properties";
        PrintProperties.printProperties(filePath);
        
        
//        Properties properties=new Properties();
//        //新建一个配置文件类型。这个类型是一个键值对列表,类似于Map ,
//        //Properties类实现了Map接口
//        //Properties相当于只能存放String类型的键值对的Map集合
//        String APath=thisPackagePath+"a.properties";
//        System.out.println("文件路径为:"+APath);
//        try
//        {
//            InputStream inStream=new BufferedInputStream(
//                    new FileInputStream(APath));
//            properties.load(inStream);
//            Set<String> keys=properties.stringPropertyNames();
//            //取出所有的键,作为键的Set集合
//            for(Iterator<String> it=keys.iterator();it.hasNext();)
//            {
//                String key=it.next();//取出下一个键key
//                String value=properties.getProperty(key);
//                //通过键从a.properties(相当于键值对Set集合)中取出value
//                System.out.println("key=\t"+key+"\tvalue="+value);
//            }
//        } catch (IOException e)
//        {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
当前包编译后的路径为:D:/dev/workspase2Spring/MyCommit/bin/com/lan/Properties/
key=	bule	value=lan
key=	lan	value=bule
key=	green	value=yes
key=	yes	value=green


//        
    }
    
}


结果:

当前包编译后的路径为:D:/dev/workspase2Spring/MyCommit/bin/com/lan/Properties/
key=	bule	value=lan
key=	lan	value=bule
key=	green	value=yes
key=	yes	value=green