Java中File类的构造函数需要我们传入一个pathname,当我们传入以"/"开头的pathname表示绝对路径,其他均表示相对路径。

一:绝对路径名:是完整的路径名,不需要任何其他信息就可以定位它所表示的文件绝对路径表示从根目录定位文件位置,不需要参照其他文件路径,win中从某个分区磁盘如"e://"开始定位,linux表示从根目录"/"开始定位。

二:相对路径:相对路径名必须使用取自其他路径名的信息进行解释。java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录可以通过System.getProperty("user.dir");获取。通常是 Java 虚拟机的调用目录。比如我们有个Test类

public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
}
}

当我们将Test.class移动到E:\a路径下执行,输出为:"E:\a",

我们在Eclipse创建项目FilePathTest(路径-->E:\WorkSpace\FilePathTest),并创建如上Test类,结构如下:--a.txt

FilePathTest
--src
        --com
  --Test.java
--a.txt
     --bin
        --com
  --Test.class
--a.txt

则此时运行Test输出为"E:\WorkSpace\FilePathTest",也就是相对的目录项目目录。如果此时需要在Test类中获取项目a.txt文件需要如下使用

File f = new File("bin/a.txt");

三、使用ClassLoader、Class读取配置文件

jvm通过类加载器加载类,我们可以通过类加载器的加载的目录作为相对目录用来读取文件,类加载器提供了

public URL getResource(String name)

public InputStream getResourceAsStream(String name) 

通常使用方式为:Test.class.getClassLoader().getResource("");

Class也提供相同的方法,只不过class相对的目录为"类加载器相对的目录/类的package";

特别注意:当我们需要将项目打包成jar,此时如果使用getResource()读取jar中的配置文件,此时返回的URL格式为jar中特有格式file:\E\Test.jar!\a.txt,这种格式作为File()的路径名是不会被识别的,所以如果我们需要读取jar中的文件则需要使用getResourceAsStream(""),直接获取输入流进行操作。

mmse4j-core-1.9.1.jar中的Dictionary就是因为使用getResource()读取同一个jar中的字典数据(Dictionary.getDefalutPath())才会找不到文件而报错,代码如下:

URL url = Dictionary.class.getClassLoader().getResource("data");
File defalutPath = new File(defPath);

java中文件的相对路径以及jar中文件的读取的更多相关文章

  1. java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

    /** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件 ...

  2. IDEA如何把写好的java文件/项目打包成一个jar的文件

    一.命令行的方法 打开cmd,输入jar -cvf [打包后的文件名].jar [要打包的目录]. 二.IDEA的方法 写完一个java程序把它封装成一个jar的包  这样就可以在别的jar上面运行这 ...

  3. Java 将数据写入全路径下的指定文件

    package com.freud.algorithm.other; import java.io.File; import java.io.FileOutputStream; public clas ...

  4. Windows中查找命令的路径 (类似Linux中的which命令)

    where is a direct equivalent: C:\Users\Joey>where cmdC:\Windows\System32\cmd.exeNote that in Powe ...

  5. java: 关于从jar中读取资源遇到的问题getClass().getResource(...)

    在Java的程序发布中,很多人会选择采用二进制的jar的格式进行发布,怎么样读取Jar里面的资源呢?主要是采用ClassLoader的下面几个方法来实现:public URL getResource( ...

  6. 从jar中读取资源文件的问题

    在项目中遇到了一个问题,在IDE中读取配置文件的程序,打成架包以后,放到服务器上跑,报找不到资源文件的错误. 其中,资源文件的路径如下: 获取配置文件路径和读取的方法如下: private stati ...

  7. java 弹出选择目录框(选择文件夹),获取选择的文件夹路径

    java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...

  8. Eclipse下的java工程目录问题和路径问题理解

    1.Eclipse下的java工程都有哪些文件夹? 答:new java project时,会默认创建SRC源代码目录,并默认创建一个bin目录作为输出目录,输出目录是指生成的class文件和配置文件 ...

  9. log配置文件log4j.propeties(配置保存日志文件的相对路径)

    log配置文件log4j.propeties(配置保存日志文件的相对路径) log4j.propeties文件: #日志的4种级别ERROR(错误).WARN(警告潜在的错误).INFO(粗粒度信息) ...

随机推荐

  1. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

  2. Base64加密解密原理以及代码实现

    1. Base64使用A--Z,a--z,0--9,+,/ 这64个字符.    2. 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字 ...

  3. ORACLE—002:Create创作型

    --用于工作的积累SQL ORACLE另外还有的类型.储过程.函数等的输入输入出. 以下看下创建. 使用方法 CREATE OR REPLACE TYPE 类型名称 AS OBJECT(  字段1   ...

  4. IDF - CTF - 牛刀小试

    找学校CTF好地方,IDF实验室CTF训练营(http://ctf.idf.cn/). . 刚接触CTF.来玩下牛刀小试.AK了. . 好爽好爽.. 1.摩斯password 嘀嗒嘀嗒嘀嗒嘀嗒 时针它 ...

  5. 通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库

    原文:通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库 本文适用于:2005.2008.2008R2所有版本 为了可以通过TCP/IP协议远程访问SQLServer数据库,需要做以 ...

  6. 比NotePad++更好的文本代码(C#)编辑器Sublime Text

    原文:比NotePad++更好的文本代码(C#)编辑器Sublime Text 前言 前两天在博客园看到@晴天猪的博客发表的关于他使用的代码编辑器,自己索性试了一下,果断好用,自己也来记录一下.以便以 ...

  7. 2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)

    Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景.磁盘有 ...

  8. SQL Server 优化存储过程的七种方法

    原文:SQL Server 优化存储过程的七种方法 优化存储过程有很多种方法,下面介绍最常用的7种. 1.使用SET NOCOUNT ON选项 我们使用SELECT语句时,除了返回对应的结果集外,还会 ...

  9. ViewGroup可实现上下、各地跑马灯效果滚动

    先上效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGFuZ25lbmd3dQ==/font/5a6L5L2T/fontsize/400/fill ...

  10. hdu4758 Walk Through Squares (AC自己主动机+DP)

    Walk Through Squares Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...