动态获取java中的文件路径

根据上一篇升级来的: java中动态的读取src下面的配置文件,动态的读取同个包下面的配置文件

工程目录:

文件路径工具类:

package com.lan.FilePath;

public class FilePath
{
    //当前的工程下的路径
    public static String getProjectPath()
    {
        
        return System.getProperty("user.dir").toString()+"\\";

    }
    //编译之后src下的文件路径,根据工程路径拼接
    public static String getSrcPathAfterRun1()
    {
        return System.getProperty("user.dir").toString()+"\\bin\\";
    }
    //根据反射获取编译之后包下面的文件路径
    public static String getPackagePath()
    {
        String thisPackagePath=FilePath.class .getResource("").toString();
//        System.out.println("路径:"+thisPackagePath);
        int m=thisPackagePath.indexOf("/");//去掉前面的file:
        thisPackagePath=thisPackagePath.substring(m+1);
//        System.out.println("路径:"+thisPackagePath);
        return thisPackagePath;//返回当前包返回的路径。
    }
    //根据反射获取编译之后的src下面的文件路径
    public static String getSrcPathAfterRun2()
    {
        String path = FilePath.class.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.FilePath;

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.FilePath;


public class FilePathTest
{
    public static void main(String[] args)
    {
        System.out.println(System.getProperty("user.dir"));
        System.out.println("当前工程路径:  "+FilePath.getProjectPath());
        System.out.println("编译后的src路径: "+FilePath.getSrcPathAfterRun1());
        System.out.println("编译后的src路径: "+FilePath.getSrcPathAfterRun2());
        System.out.println("编译之后的同一个包下面的路径: "+FilePath.getPackagePath());
        System.out.println("------读取工程路径下面的配置文件:");
        String cPath=FilePath.getProjectPath()+"c.properties";
        PrintProperties.printProperties(cPath);
        System.out.println("-----读取src下面的配置文件方法1: ");
        String bPath=FilePath.getSrcPathAfterRun1()+"b.properties";
        PrintProperties.printProperties(bPath);
        System.out.println("-----读取src下面的配置文件方法2:");
        String bPath2=FilePath.getSrcPathAfterRun2()+"b.properties";
        PrintProperties.printProperties(bPath2);
        System.out.println("-----读取相同包下面的配置文件:");
        String aPath=FilePath.getPackagePath()+"a.properties";
        PrintProperties.printProperties(aPath);
    }
}

c.properties:

lan=123
xiaoming=nan
xiaohong=nv
b.properties:

lan=123
blue=234
green=2345
red=456
a.properties:

bule=lan
lan=bule
green=yes
yes=green
运行结果:

D:\dev\workspase2Spring\MyUtil
当前工程路径:  D:\dev\workspase2Spring\MyUtil\
编译后的src路径: D:\dev\workspase2Spring\MyUtil\bin\
编译后的src路径: D:/dev/workspase2Spring/MyUtil/bin/
编译之后的同一个包下面的路径: D:/dev/workspase2Spring/MyUtil/bin/com/lan/FilePath/
------读取工程路径下面的配置文件:
key=	lan	value=123
key=	xiaoming	value=nan
key=	xiaohong	value=nv
-----读取src下面的配置文件方法1: 
key=	blue	value=234
key=	lan	value=123
key=	green	value=2345
key=	red	value=456
-----读取src下面的配置文件方法2:
key=	blue	value=234
key=	lan	value=123
key=	green	value=2345
key=	red	value=456
-----读取相同包下面的配置文件:
key=	bule	value=lan
key=	lan	value=bule
key=	green	value=yes
key=	yes	value=green
FilePath类中提供了两种方法来找到文件路径。

通过工程路径来自己拼接,这种方式要对编译之后的文件路径理解透。src目录下的文件编译之后会出现在bin目录中。

第一种是:通过工程路径来自己拼接,这种方式要对编译之后的文件路径理解透。src目录下的文件编译之后会出现在bin目录中。通过工程路径来自己拼接,这种方式要对编译之后的文件路径理解透。src目录下的文件编译之后会出现在bin目录中。我这种方法目前只能拼接到bin目录下面。还没想好怎么拼接到包路径下面。

第二种是:使用反射。这种方法比较灵活。可以找到bin路径,也能找到包路径。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值