file相对路径java_浅谈java 中文件的读取File、以及相对路径的问题

一、对于java项目中文件的读取

1、使用system 或是 系统的properties对象

①直接是使用 string relativelypath=system.getproperty("user.dir");

②使用properties对象

我们先来遍历一下系统的属性:

properties properties = system.getproperties();

enumeration pnames = properties.propertynames();

while (pnames.hasmoreelements()) {

string pname = (string) pnames.nextelement();

system.out.print(pname + "--------------");

system.out.println(properties.getproperty(pname));

}

这是系统的属性,由此其实还是绕到使用 user.dir 属性来取得当前项目的真是路径

通过 string relativelypath = properties.getproperty("user.dir"); 取得

我自己的电脑上面的项目 log4jproj 的真是路径是 :

user.dir--------------d:\develop\workspace\ws_self\10_ws_eclipse_j2ee_mars\log4jproj

其实方式①和方式②一个意思,殊途同归

2、第二种方式:使用当前类的类加载器进行获取 classloader

首先来回顾一下,如何获取class字节码实例,三种方式:(比如我的类叫demo)

① demo.class

② class.forname("类的全称")

③ 利用demo的实例对象,调用对象的getclass()方法获取该对象的class实例

回顾了如何获取class字节码实例之后,然后再来回顾一下,如何获取classloader对象

① demo.class.getclassloader()

② class.forname("类的全称").getclassloader()

③ 假设demo为demo的实例化对象 demo.getclass().getclassloader()

④ 通过thread对象的getcontextclassloader() 方法来获取

thread.currentthread().getcontextclassloader()

进入正题:

有了classloader对象之后,我们这么时候通过classloader对象来获取java项目中的文件

首先让大家看下我当前的项目目录结构

以及实际文件的目录结构

需求就是,此时test需要读取 log4j.properties 文件的路径

用到classloader的两个方法,一个是静态的一个非静态的

输出结果:

记住哦,这里的getsystemresource方法获取的是url对象,需要调用getpath()方法获取路径

1、当只是获取 log4j.properties 文件输入流的时候可以通过以下两种方式

① 依然是使用 classloader, 其中有两个方法,两者一个是静态一个非静态

classloader.getsystemresourceasstream("config/log4j.properties");

thread.currentthread().getcontextclassloader().getresourceasstream("config/log4j.properties");

② 先通过file文件包装之后,然后新建一个输入流

file file01 = new file("config/log4j.properties");

system.out.println(file01.getabsolutepath());

file file02 = new file(properties.getproperty("user.dir") + "/bin/config/log4j.properties");

system.out.println(file02.getabsolutepath());

//classloader.getsystemresource获取的是url对象

file file03 = new file(classloader.getsystemresource("config/log4j.properties").getpath());

system.out.println(file03.getabsolutepath());

其中创建file03 的方式不建议采纳,因为getsystemresource方法如果没获取到文件,则得到的

url对象为null,此时再调用getpath()就会报错

如果有了文件对象就可以直接创建流了,此处不作赘述

以上这篇浅谈java 中文件的读取file、以及相对路径的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#开发Unity游戏教程之判断语句

C#开发Unity游戏教程之判断语句 游戏执行路径的选择——判断 玩家在游戏时,无时无刻不在通过判断做出选择。例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏百玩不厌!既然提…

前端学习(1539):hello world

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <!-- 需要…

java实现自动任务_Java实现定时任务的三种方法

普通thread这是最常见的&#xff0c;创建一个thread&#xff0c;然后让它在while循环里一直运行着&#xff0c;通过sleep方法来达到定时任务的效果。这样可以快速简单的实现&#xff0c;代码如下&#xff1a;public class Task1 {public static void main(String[] args) {// r…

Android Sdk 国内镜像下载地址

大连东软信息学院镜像服务器地址:- http://mirrors.neusoft.edu.cn 端口&#xff1a;80北京化工大学镜像服务器地址:- IPv4: http://ubuntu.buct.edu.cn/ 端口&#xff1a;80- IPv4: http://ubuntu.buct.cn/ 端口&#xff1a;80- IPv6: http://ubuntu.buct6.edu.cn/ 端口&#…

java文件替换一行数据_用Golang替换文件中的一行

我是Golang的新手&#xff0c;从一些例子开始 . 目前&#xff0c;我要做的是逐行读取文件&#xff0c;并在满足特定条件时将其替换为另一个字符串 . 该文件用于测试目的包含四行&#xff1a;onetwothreefour处理该文件的代码如下所示&#xff1a;func main() {file, err : os.O…

python核心编程第六章练习6-12

6-12.字符串。&#xff08;a&#xff09;创建一个名字为findchr()的函数&#xff0c;函数声明如下。def findchr(string, char)findchr()要在字符串string中查找字符char&#xff0c;找到就返回该值得索引&#xff0c;否则返回-1。不能用string.*find()或者string.*index()函数…

java 迭代器的原理_Java集合框架迭代器Iterator实现原理解析

使用循环遍历集合普通for循环for(int i0;i<10;i){}增强for循环for(String str:list){}什么是迭代器IteratorIterator是Java中的一个接口&#xff0c;核心作用就是用来遍历容器的元素&#xff0c;当容器实现了Iterator接口后&#xff0c;可以通过调用Iterator()方法获取一个I…

当winform窗体的Bordestyle设置为None时,鼠标可以拖动窗体的办法

方法一&#xff1a; 1 2015-07-11 16:05:352 bool formMove false;//窗体是否移动3 Point formPoint;//记录窗体的位置4 private void Form1_MouseDown(object sender, MouseEventArgs e)5 {6 formPoint new Point(); …

传图识字java_Java:全面 清晰的 NIO 学习攻略

Java&#xff1a;全面 & 清晰的 NIO 学习攻略发布时间&#xff1a;2018-11-19 09:19,浏览次数&#xff1a;202, 标签&#xff1a;JavaNIO<>前言* JDK 1.4后&#xff0c;Java提供了一个全新的IO API&#xff0c;即 Java New IO* 本文 全面 & 详细解析Java New IO&…

java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能!太好用了...

说起“飞行模式”很多朋友们都会说我又不坐飞机&#xff0c;要它有啥用&#xff1f;当然有用&#xff01;而且用处可多了不纠结手机辐射问题很多朋友担心晚上不关机手机会有辐射&#xff0c;但是又觉得关机开机很繁琐&#xff0c;真是很纠结。其实只要把手机飞行模式打开就行啦…

Ubuntu下一个openldapserver部署步骤

1&#xff1a;安装zlib 下载zlib-1.2.3.tar.gz&#xff08;或其它版本号&#xff09; wget http://down1.chinaunix.net/distfiles/zlib-1.2.3.tar.gz # ./configure --shared # make # make install 2&#xff1a;安装openssl 不要卸载系统自带的Openssl,否则非常多服务都起不…

dentity在Java里是什么意思_注释@Id和@GeneratedValue(strategy = GenerationType.IDENTITY)的用途是什么?为什么世代类型是身份?...

小编典典让我回答这个问题&#xff1a;首先&#xff0c;使用注释作为我们的configure方法只是一种便捷的方法&#xff0c;而不是应对无休止的XML配置文件。的Id注释是继承自javax.persistence.Id&#xff0c;指示构件字段下面是当前实体的主键。因此&#xff0c;您的Hibernate和…

ACM配置指南

Ubuntu桌面入门指南  ACM比赛系统ubuntu 使用指南 ACM核武器 简明 Vim 练级攻略  Vim命令合集  代码编辑神器VIM&#xff08;附我写acm程序时的配置&#xff09; my_vimrc in ubuntu set cin nu et ts4 sw4 sts4 noswapfile nobackup cursorline set backgrounddark synt…

前端学习(1545):模型和控制器

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <!-- 需要…