码迷,mamicode.com
首页 > 编程语言 > 详细

Java中的文件路径

时间:2015-04-23 17:10:10      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

通常情况下,在Java项目中,我们使用的路径都是在拿到类加载路径后,根据相对位置,使用

FilePathTest.class.getResourceAsStream(relativePath);拿到文件。
 技术分享
今天小生不使用classPath,而是直接去使用相对路径来试验。
小生的work space路径是 E:\workspace\springMVCStudy,在该work sapce下创建Java Project,目录如下。
技术分享
1. 拿到new File("")所对应的绝对路径。
在MyUrlDemo类中,通过
    File directory = new File("");
    String courseFile = directory.getCanonicalPath();
    System.out.println("项目根路径:" + courseFile);
我们直接拿到的是项目根路径。
    结果是:::E:\workspace\springMVCStudy\testFilePath
2. test1.txt的路径
    由于test1.txt位于项目的根路径下,我们可以直接使用如下方式拿到。
    File file1 = new File("test1.txt");
3. test2.txt的路径
    由于test2.txt位于src下,照猫画虎
     File file2 = new File("src\\test2.txt");
4. test3.txt的路径
     由于test3.txt位于src下,再次照猫画虎
     File file2 = new File("src\\com\\rock\\testFilePath\\test3.txt");
这样我们拿到了3个文件,但是这样并不保险。因为在开发环境中,我们的文件结构是这样的,但是在测试环境和生产环境中,
我们的代码都是编译之后才才去运行。
在编译之后,上面的test1.txt不能被打到jar包中,也就是说,就不能再通过上面的方法访问test1.txt了。
对于test2.txt和test3.txt,也不能通过上述方法访问,这是因为编译之后就没有src目录了。
 
以下两种方法可以查看对应的路径,根据该路径可以拼出相对路径,然后使用相应的getResourceAsStream()得到文件的输入流。
1. 获取类的加载路径
    当前类的加载路径::this.getClass().getResource("").getPath() 或者MyURLDemo.class.getResource("").getPath()
    类加载的根路径::: this.getClass().getResource("/").getPath()
2. 获取类加载器的路径
    this.getClass().getClassLoader().getResource("").getPath();  结果等同于类加载的根路径
 
附测试代码:
package com.rock.test.filePath;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class FilePathTest {

    public static void main(String[] args) {
        //使用文件相对路径
        File file1 = new File("test1.txt");
        System.out.println("test1.txt exists " + file1.exists());
        
        File file2 = new File("src\\test2.txt");
        System.out.println("test2.txt exists " + file2.exists());
        
        File file3 = new File("src\\com\\rock\\test\\filePath\\test3.txt");
        System.out.println("test3.txt exists " + file3.exists());
        
        
        
        InputStream stream = FilePathTest.class.getResourceAsStream("/test2.txt");
//        InputStream stream = FilePathTest.class.getResourceAsStream("test3.txt");
//        InputStream stream = FilePathTest.class.getClassLoader().getResourceAsStream("test2.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
        String line = null;
        try {
            while((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        //使用类加载路径获取test2.txt
        File file2ByLoard = new File(FilePathTest.class.getResource("/").getPath() + "\\test2.txt");
        System.out.println("test2.txt exists by load " + file2ByLoard.exists());
        
        File file2ByLoarder = new File(FilePathTest.class.getClassLoader().getResource("").getPath() + "\\test2.txt");
        System.out.println("test2.txt exists by loader " + file2ByLoarder.exists());
    
        File file2ByClasspath = new File(System.getProperty("java.class.path") + "\\test2.txt");
        System.out.println("test2.txt exists by Classpath " + file2ByClasspath.exists());
    
    }

}

 

Java中的文件路径

标签:

原文地址:http://www.cnblogs.com/scottwang/p/4450938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!