获取文件的绝对路径,读取该文件

一、文件目录打印图

下面的文件目录图,是项目中文件的位置信息;下面的例子是按照这个图来演示的。

.

|-- java

| |-- ibard

| | |-- demo1

| | | `-- DemoTest1.java

| | `-- demo2

| | `-- DemoTest2.java

`-- resources

|-- demo0.properties

`-- ibard

|-- demo2

| `-- demo2.properties

`-- demo3

`-- demo3.properties

项目打包发布后的目录结构:(要注意的是,我们操作的文件状态是下面这个目录的情形!)

target

|-- classes

| |-- ibard

| | |-- demo0.properties

| | |-- demo1

| | | `-- DemoTest1.java

| | `-- demo2

| | `-- DemoTest2.java

| | | `-- demo2.properties

| | |-- demo3

| | `-- demo3.properties

二、properties文件介绍

以下内容引自Wikipedia:

.properties 文件是一种和java相关的文件拓展,用于存储配置信息。每个参数以一对字符串的信息存储,即key-value 对。

属性信息的格式:

可以是:key=value 、key = value 、key:value 、key value 。

# 或! 用于注释该行(当其在属性中时,将不起作用),\ 用于转义和拼接多行的value 。

wikipedia的properties文件模板:

# You are reading the ".properties" entry.

! The exclamation mark can also mark text as comments.

# The key characters =, and : should be written with

# a preceding backslash to ensure that they are properly loaded.

# However, there is no need to precede the value characters =, and : by a backslash.

website = https://en.wikipedia.org/

language = English

# The backslash below tells the application to continue reading

# the value onto the next line.

message = Welcome to \

Wikipedia!

# Add spaces to the key

key\ with\ spaces = This is the value that could be looked up with the key "key with spaces".

# Unicode

tab : \u0009

# If you want your property to include a backslash, it should be escaped by another backslash

path=c:\\wiki\\templates

# However, some editors will handle this automatically

三、获取文件路径

注意: 这里我们讲的获取文件路径和读取文件,有一个最高级范围的限定的前提。

在java项目和web项目中,其最高级的目录只能是并行的java 目录和resource 目录。

因此,我们只能操作java 中的源代码文件和resource 的资源文件。对于web项目来说,我们是无法通过这里讲的方法来获取webapp 目录下的文件的。

我们想获得的文件路径,无非是两种。一是java类文件的路径(*.java ),二是资源文件的路径(*.properties或其他资源文件)。通常情况下,我们主要是想获取资源文件的路径。

这里我们使用DemoTest2.java 类来获取demo2.properties 和demo3.properties 这两个文件的路径。

说明: 下面所讲的方法,其定位参照的方法都是借助.class 类文件来展开的(也就是第2个目录结构图),因此其位置都是编译后的文件位置(当然,通常其位置和源代码位置一致)。

我们所获取的文件路径,都是绝对路径(相对于系统而言的全写路径)。比如windows下会是C:/user/ibard/desktop/....,linux下会是/opt/tomcat8/...这样的物理绝对路径。

1、URL

在这里,path可以是相对路径,也可以是绝对路径(绝对路径的path以/ 开头,指向你程序的根目录)。得到的结果是URL 类型。

1.1、path使用相对路径

当使用相对路径时,其参照目录是当前类文件所在的目录。当path传入的值为"" 时,获取的就是当前目录的路径。

// DemoTest2.java文件的部分代码

// 1.DemoTest2.java中获取demo2.properties文件的URL

URL url_1 = DemoTest2.class.getResource("demo2.properties");

// 2.生成File对象

File file_1 = new File(url_1.getFile());

// 3.获取文件的绝对路径值

String filepath_1 = file_1.toPath();

1.2、path使用绝对路径

当使用绝对路径时,必须是以/ 开头,这代表了当前java源代码的根目录。当path传入的值为/ 时,获取的就是java源代码的根目录。

// DemoTest2.java文件的部分代码

// 1.DemoTest2.java获取demo3.properties文件的URL

URL url_2 = DemoTest2.class.getResource("/ibard/demo3/demo3.properties");

File file_2 = new File(url_2.getFile());

String filepath_2 = file_2.toPath();

当要获取的资源文件与当前java类不在同一个包下时,应该使用绝对路径的方式来获取资源文件的绝对路径,进而来生成File对象操作文件。

2、URL

在这里,通过获取类加载器来获取资源文件的路径。path只能是绝对路径,而且该绝对路径是不以/开头的。其实介绍的第一种方法,其内部源码就是调用这种方法。

// DemoTest2.java文件的部分代码

// 1.DemoTest2.java获取demo2.properties文件的URL

URL url_3 = DemoTest2.class.getClassLoader().getResource("ibard/demo2/demo2.properties");

File file_3 = new File(url_3.getFile());

String filepath_3 = file_3.toPath();

总结

上面介绍的2种方法都是用来获取文件的File对象和绝对路径。而File 对象在后面的资源文件的读取中就会使用到。

四、读取资源文件

更多的时候,我们是要读取资源文件内部的信息。对于.properties 文件(一般是键值对的形式保存信息),在java 中有一个与其对应的类,即Properties 类。通过构造Properties 类,我们可以读取资源的key 和value 。

1、 Properties对象读取资源文件

1.1、生成properties 对象

首先,我们需要生成Properties 对象:Properties properties= new Properties(); 。

1.2、获取资源文件的输入流

然后,我们需要得到资源文件的输入流,而得到输入流的方法有两种。

1.2.1、Concrete.class.getResourceAsStream(String path)

path可以是相对路径,也可以是绝对路径。

InputStream in = DemoTest2.class.getResourceAsStream("demo2.properties");

1.2.2、Concrete.class.getClassLoader().getResourceAsStream(String path)

path只能是绝对路径。但是绝对路径却不以/ 开头,和之前相反了。

InputStream in = DemoTest2.class.getClassLoader().getResourceAsStream("ibard/demo3/demo3.properties");

1.3、加载输入流,获取值

在得到输入流之后,将输入流加载到Properties 对象,之后就可以获取值了。

// 加载输入流对象

properties.load(in);

String value = properties.getProperty("name");

java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件相关推荐

  1. java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹

    package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...

  2. java 取项目根路径_java中如何获取项目的路径

    记录是为了更好的成长! 1.ssm项目中 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI() 结果:/TEST/test.jsp (2)得到 ...

  3. java 获得当月天数_java中 如何获取当月的天数、指定日期的月份天数详解

    代码实现如下:import java.util.Calendar; public class GetDay { public static void main(String[] args) { int ...

  4. java 输出文件到mac路径_Java 中几种获取文件路径的方式

    原标题:Java 中几种获取文件路径的方式 1. 前言 Java开发中我们经常要获取文件的路径,比如读取配置文件等等.今天我们就关于文件的路径和如何读取文件简单地探讨一下. 2. 文件的路径 文件的路 ...

  5. java资源文件路径_Java 中获取资源(文件)的路径问题总结

    Java 中获取资源(文件)的路径问题总结 首先,Java 中获取资源大体上可分为两种方式,基于 文件系统的 和 基于classpath的. 1. 基于文件系统的相对简单. 比如 构造一个File f ...

  6. java获取项目中的路径_java中几种获取项目路径方式

    转自http://caodaoxi.iteye.com/blog/1234805 在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是Web ...

  7. java 获取文件权限_Java中的文件权限,检查权限和更改权限 - Break易站

    Java提供了许多方法调用来检查和更改文件的权限,例如可以将只读文件更改为具有写入权限.当用户想要限制文件允许的操作时,需要更改文件权限.例如,文件权限可以从写入更改为只读,因为用户不再想要编辑文件. ...

  8. java获取子路径_Java中路径的获取

    1.Java中获取路径的方法:  Class_Name.class .getResource("")        //   Class_Name.class .getResour ...

  9. java代码获取项路径_Java中获取各种路径的方法盘点

    Java代码中获取路径 假设当前项目路径为:D:/wunian/workspace/JavaProject,现在来分别获取此项目中的各种路径. 1.获取资源文件(.class文件)所在路径(四种方式) ...

最新文章

  1. linux zip指定目录解压,Linux zip解压/压缩并指定目录
  2. c# 获取本机 MAC地址\序列号\硬盘序列号
  3. 研究发现,脸谱网和谷歌在流媒体上有广告跟踪器
  4. Appium 与 Chromedriver
  5. 11届蓝桥杯青少年组C++全国赛高级组 八.编程实现:计数(python3实现)
  6. 收藏 | 机器学习特征选择方法总结
  7. Smack 4.3.2 发布,XMPP(jabber) 的 Java 客户端类库
  8. Docker:Docker 性质及版本选择 [三]
  9. 大量字段表单在PHP便捷处理分享
  10. 京东支付首席架构师“泄密”京东支付系统架构
  11. GUI图形用户界面设计
  12. 北大信科计算机考研科目,GitHub - 2584800190/kao_yan: 19年北大信科考研经验
  13. Redis集群原理简述
  14. 微信朋友圈设计方案简述
  15. RS-485串口通讯测试及四路集线器功能探究
  16. 非常有意思的Flowlet
  17. 笔记本自动打开计算机,笔记本电脑自动开机是什么原因
  18. linpack性能测试记录
  19. 爬虫系列——做爬虫必备:各大网站蜘蛛UA
  20. Unity 做一个提示框,背景图片随文字改变大小

热门文章

  1. matlab2c使用c++实现matlab函数系列教程-rand函数
  2. 汇编语言上机考试三星题——判断一个不超过65535的整数是否为质数
  3. scrcpy设置快捷键_推荐电脑高清晰同步Anroid屏幕软件Scrcpy
  4. mybatis问题。foreach循环遍历数组报错情况,及其解决方法
  5. 课时37:类与对象:面向对象编程
  6. WIN8系统中 任务管理器 性能栏 显示CPU利用率(已暂停)怎么回事?
  7. 注册flash.ocx inno setup (转)
  8. web工程本地跟tomcat部署导致根路径不一致问题
  9. 软件外包项目实施过程中的关键因素(摘自IT168技术频道)
  10. [转载] python基于内置的SimpleHTTPServer来搭建简易的FTP服务器实现局域网内文件共享