获取JAVA文件路径

本文转载自:http://blog.csdn.net/appleprince88/article/details/11599805

为了方便以后自己查看,所以转载过来记录下。

由于经常需要获取文件的路径,但是比较容易忘记,每次需要总需要查询,现在把这些方式写下来,方便自己的时候也方便大家了,如果大家在下面的方法遇到什么问题,可以留言。

一.Java文件获取路径方式:

各种获取方式如示例代码所示:

package first.second;  
  
import java.io.File;  
  
public class GetPath {  
  
    public static void getPath()  
    {  
        //方式一  
        System.out.println(System.getProperty("user.dir"));  
        //方式二  
        File directory = new File("");//设定为当前文件夹  
        try{  
            System.out.println(directory.getCanonicalPath());//获取标准的路径  
            System.out.println(directory.getAbsolutePath());//获取绝对路径  
        }catch(Exception e)  
        {  
            e.printStackTrace();  
        }  
        //方式三  
        System.out.println(GetPath.class.getResource("/"));  
        System.out.println(GetPath.class.getResource(""));  
        //方式4  
        System.out.println(GetPath.class.getClassLoader().getResource(""));  
        System.out.println(GetPath.class.getClassLoader().getResource("source.xml"));  
    }  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        GetPath.getPath();  
    }  
  
}  

其在 Java  project项目下输出如下:

方式一  
D:\eclipse\juno_workspace\Test  
方式二  
D:\eclipse\juno_workspace\Test  
D:\eclipse\juno_workspace\Test  
方式三  
file:/D:/eclipse/juno_workspace/Test/bin/  
file:/D:/eclipse/juno_workspace/Test/bin/first/second/  
方式四  
file:/D:/eclipse/juno_workspace/Test/bin/  
file:/D:/eclipse/juno_workspace/Test/bin/source.xml  


 在Web project输出如下:

方式一  
D:\apache-tomcat-6.0.36\bin  
方式二  
D:\apache-tomcat-6.0.36\bin  
D:\apache-tomcat-6.0.36\bin  
方式三  
file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/  
file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/first/second/  
方式四  
file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/  
file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/source.xml  

说明一下,实验类是放在first.second包下的,source.xml是src文件下的一个文件。在Java project测试的项目名是Test,在web project测试的项目名是ConsisPro,还有就是 web project项目测试时运行在tomcat中,通过调用实验类GetPath产生的运行结果。

         从上面我们可以看出方式一和方式二在java project项目下是获取的项目根目录,而在web project项目下获取的是tomcat的bin目录。

         方式三当使用“/”时获取的是类编译后所在的目录,当不使用“/”是获取的是编译好类所在的目录,也就是前面加“/”产生的目录加上相应的包目录。

        方式四中第一个获取的也是类编译后的目录,第二个获取的是也就是我们放在src目录底下的文件,编译后放在类编译后的目录底下,当我们需要获取放在Src目录底下的文件时,用这个方式很方便。

二.获取文件的一些具体情况下的方式

1.获取你存放在src目录下的文件,一般为配置文件,如下图1所示。推荐使用方式四的中的第二个方式,示例代码如下:


  1. /* @param name   文件名  不包含路径 
  2.  */  
  3. public static  String getSrcPath(String name)  
  4. {  
  5.     String result=null;  
  6.     URL urlpath = GetPath.class.getClassLoader().getResource(name);   
  7.     String path=urlpath.toString();  
  8.     //remove the head "file:",if it exists  
  9.     if(path.startsWith("file"))  
  10.     {  
  11.         path=path.substring(5);  
  12.     }  
  13.     path.replace("/", File.separator);  
  14.     result=path;  
  15.     return result;  
  16. }  

 2.在java project获取与src文件夹并列的文件下的文件,如下图2所示。这种情况推荐使用方式一和方式二,下面以第一种方式给出示例代码:


// filename 文件名 不包含路径  
// ...args  文件夹名      可以输入多个文件夹名参数  
public static String getParallelPath(String filename,String ...args)  
{  
    String pre=System.getProperty("user.dir");  
    String path=pre;  
    for(String arg:args)  
    {  
        path+=File.separator+arg;  
    }  
    path+=File.separator+filename;  
    if(path.startsWith("file"))  
    {  
        path=path.substring(5);  
    }  
    path.replace("/", File.separator);  
    return path;  
}  
3.如果希望无论在java project或者web project项目使用类包底下的一些文件,如下图3所示。这种情况可以使用方式三中的第二种方式,使用示例代码如下:



public static String getPackagePath(String filename)  
    {  
        String result=null;  
        URL urlpath=GetPath.class.getResource("");  
        String path=urlpath.toString();  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        path.replace("/", File.separator);  
        result=path+filename;  
        return result;  
    }  

Tips:这个方法要在和要获取的文件在同一个包中才可以,在不同包中,需要使用其它方式

         4.当在web project项目下想获取WebRoot目录底下自定义目录文件下的文件,如下图4所示。这种情况推荐方式三和方式四,进行一些操作,下面是一个示例代码:



//获取WebRoot目录  
    public static String getWebRootPath()  
    {  
        URL urlpath=GetPath.class.getResource("");  
        String path=urlpath.toString();  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        if(path.indexOf("WEB-INF")>0)  
        {  
            path=path.substring(0,path.indexOf("WEB-INF")-1);  
        }  
        path.replace("/", File.separator);  
        return path;  
    }  
    //webroot  WebRoot目录  
    //filename  文件名  
    //...args   文件名所在文件夹,多个参数输入  
    public static String getWebRootFilepath(String webroot,String filename,String ...args)  
    {  
        String pre=webroot;  
        String path=pre;  
        for(String arg:args)  
        {  
            path+=File.separator+arg;  
        }  
        path+=File.separator+filename;  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        path.replace("/", File.separator);  
        return path;  
    }  

三.空格问题

可以用replaceAll("%20"," "); 来解决部分问题,遇到其它问题可以参考下面的文章 http://www.2cto.com/kf/201108/100533.html 。我认为当你得项目设为UTF-8的格式应该不会遇到空格问题。

参考文献

        1.      JAVA中获取路径的各种方式。http://gjt1244.blog.163.com/blog/static/19165205620118724046617/

        2.      Java获取当前文件路径。http://www.cnblogs.com/lostyue/archive/2011/06/27/2091686.html

        3.      JAVA彻底解决获取空格路径问题。http://www.2cto.com/kf/201108/100533.html

附录源代码


package first.second;  
  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.URL;  
  
public class GetPath {  
  
    public static void getPath()  
    {  
        //方式一  
        System.out.println("方式一");  
        System.out.println(System.getProperty("user.dir"));  
        //方式二  
        System.out.println("方式二");  
        File directory = new File("");//设定为当前文件夹  
        try{  
            System.out.println(directory.getCanonicalPath());//获取标准的路径  
            System.out.println(directory.getAbsolutePath());//获取绝对路径  
        }catch(Exception e)  
        {  
            e.printStackTrace();  
        }  
        //方式三  
        System.out.println("方式三");  
        System.out.println(GetPath.class.getResource("/"));  
        System.out.println(GetPath.class.getResource(""));  
        //方式4  
        System.out.println("方式四");  
        System.out.println(GetPath.class.getClassLoader().getResource(""));  
        System.out.println(GetPath.class.getClassLoader().getResource("source.xml"));  
    }  
    /** 
     * @param name   文件名  不包含路径 
     */  
    public static  String getSrcPath(String name)  
    {  
        String result=null;  
        URL urlpath = GetPath.class.getClassLoader().getResource(name);   
        String path=urlpath.toString();  
        //remove the head "file:",if it exists  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        path.replace("/", File.separator);  
        result=path;  
        return result;  
    }  
    // filename 文件名 不包含路径  
    // ...args  文件夹名      可以输入多个文件夹名参数  
    public static String getParallelPath(String filename,String ...args)  
    {  
        String pre=System.getProperty("user.dir");  
        String path=pre;  
        for(String arg:args)  
        {  
            path+=File.separator+arg;  
        }  
        path+=File.separator+filename;  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        path.replace("/", File.separator);  
        return path;  
    }  
    public static void readFile(String filepath)  
    {  
        File file=new File(filepath);  
        try {  
            InputStreamReader sr=new InputStreamReader(new FileInputStream(file));  
            BufferedReader br=new BufferedReader(sr);  
            String line=null;  
            while((line=br.readLine())!=null)  
            {  
                System.out.println(line);  
            }  
              
        } catch (FileNotFoundException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
    public static String getPackagePath(String filename)  
    {  
        String result=null;  
        URL urlpath=GetPath.class.getResource("");  
        String path=urlpath.toString();  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        path.replace("/", File.separator);  
        result=path+filename;  
        return result;  
    }  
    //获取WebRoot目录  
    public static String getWebRootPath()  
    {  
        URL urlpath=GetPath.class.getResource("");  
        String path=urlpath.toString();  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        if(path.indexOf("WEB-INF")>0)  
        {  
            path=path.substring(0,path.indexOf("WEB-INF")-1);  
        }  
        path.replace("/", File.separator);  
        return path;  
    }  
    //webroot  WebRoot目录  
    //filename  文件名  
    //...args   文件名所在文件夹,多个参数输入  
    public static String getWebRootFilepath(String webroot,String filename,String ...args)  
    {  
        String pre=webroot;  
        String path=pre;  
        for(String arg:args)  
        {  
            path+=File.separator+arg;  
        }  
        path+=File.separator+filename;  
        if(path.startsWith("file"))  
        {  
            path=path.substring(5);  
        }  
        path.replace("/", File.separator);  
        return path;  
    }  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
//      GetPath.getPath();  
//      //1 test  
//      System.out.println(GetPath.getSrcPath("source.xml"));  
//      GetPath.readFile(GetPath.getSrcPath("source.xml"));  
//      //2 test  
        System.out.println(GetPath.getParallelPath("source.xml", "my file"));  
        GetPath.readFile(GetPath.getParallelPath("source.xml", "my file"));  
//      //3 test  
        System.out.println(GetPath.getPackagePath("source.xml"));  
        GetPath.readFile(GetPath.getPackagePath("source.xml"));  
          
    }  
  
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值