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

内容转自: https://blog.csdn.net/fk1778770286/article/details/53900636

1 Properties properties = new Properties();
2 InputStream is = DBUtils.class.getResourceAsStream("jdbc.properties");

以下写法,从class根目录查找文件

1 Properties properties= new Properties();
2 InputStream inStream= DBUtil.class.getClassLoader().getResourceAsStream("configjdbc.properties");
3 properties.load(inStream);

以下写法从当前类所在package下查找文件

1 Properties properties= new Properties();
2 InputStream inStream= DBUtil.class.getResourceAsStream("configjdbc.properties");
3 properties.load(inStream);

====================以下来自转载=============

由java中的数据库配置文件引入代码,想到文件加载的方式和路径问题

  

一、对于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()就会报错

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

原文地址:https://www.cnblogs.com/zhumaoyu/p/9092655.html

时间: 2024-08-29 08:57:38

java 中文件的读取File、以及相对路径的问题的相关文章

java中文件的读取和写入

//首先要顶一个file文件用来存放要读取的文件 File f=new File("c:/test/aa.txt"); //在实例化一个输入流,并把文件对象传到里面 FileInputStream inputStream=new FileInputStream(f); //定义一个字节数组,用来存放读取的内容 byte [] b=new byte[(int)f.length()]; int len=0; int temp=0; while((temp=inputStream.read(

java中文件的读与写

最近一直在学习java中如何读取和写出文件,看了java API之后,发现在java.io中有很多关于文件读与写的类,下面就介绍几个经常用到的. 首先是:InputStream和OutputStream,API中说它俩是所有抽象类表示字节输入输出流的超类,所以在它们下面派生了很多子类.例如:FileInputStream和OutputStream等等.这些类都是以单字节的形式读入数据的,所以如果读入的数据中有中文字符,那么就会出现中文乱码现象. 其次是:Reader和Writer,这两个类是用于

java中文件的读写

Java中文件读写操作的作用是什么?回答这个问题时应该先想到的是Java只是一门语言,我们的一种使用工具而已,这样答案就明晰了,就是将外来的各种数据写入到某一个文件中去,用以保存下来:或者从文件中将其数据读取出来,供我们使用.就如下电影过程,从网络资源中下载一部电影保存于你电脑中(写文件),当你想看的时候就用播放器打开(读文件).Java中如何对文件进行读写操作?先理一理,Java中的流分两种,字节流和字符流,其中字节流的两个基类是InputStream和OutputStream;字符流的两个基

java中文件的I/O操作

java中文件的读写操作 (一) (1)java中文件的字节转成字符读操作 FileInputStream fStream = new FileInputStream("test.txt");//此时为字节流 byte[] b = new byte[31];//定义字节数组存储从文件夹中读取的数据,大小最多31字节 fStream.read(b);//将test.txt的数据读到b中 String line = new String(b,"UTF-8");//将字节

关于java中文件删除失败的原因分析

最近在做一个文档管理系统,结果在删除文件的时候,一直提示我文件删除失败,当然啦,是我在jsp里面写的一个alert("文件删除失败!"),然后我就纳闷儿了,为什么删不掉呢?后来打开windows,找到相应的文件,用管理员权限去删除也删不掉!然后就给我报错,java TM...正在使用这个文件,我顿时就凌乱了,因为我使用的是MyEcplise,所以我又回去检查代码,后来终于找到元凶了,是一个警告导致的错误!警告啊!下面我贴上代码: /** * 获取单个文件的大小 * @param fil

java中利用RandomAccessFile读取超大文件

超大文件我们使用普通的文件读取方式都很慢很卡,在java中为我提供了RandomAccessFile函数,可以快速的读取超大文件并且不会感觉到卡哦,下面看我的一个演示实例. 服务器的日志文件往往达到400多M,简单的文件读取实在太慢,太占用机器资源. 特别是如果你需要5分钟就扫描一次日志文件,来统计一些即时数据.比如刚才10分钟的来访客户(大型网站用户统计系统例如51.la 会经常用到吧.)即时扫描大数据文件中的一部分显得非常之重要.本文讲述了如果使用java的RandomAccessFile方

Java中Io流操作-File类的常用操作-创建文件,创建文件夹

package com.hxzy.IOSer; import java.io.File;import java.io.IOException; public class Demo03 { public static void main(String[] args)throws Exception{ Gu_1(); Gu_2(); } /* * 2.File对象调用file.mkdirs() * 可以创建多层文件夹 * 这个方法是创建文件夹的 返回的同样是布尔值 * 同样需要File类的构造方法

java中文件操作《一》

在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File.inputStream.outputStream.FileInputStream.FileOutputStream.reader.writer.FileReader.FileWriter等等,其中对文件的操作又分为两大类,一类是字符流,一类是字节流.所谓的字符流是以字节(8b)为单位进行读/写,字符流即使用字符为单位读/写,java使用unicode编码,一个字符两个字节,下面分别对

java 中 “文件” 和 “流” 的简单分析

java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 //创建一个File 对象,检验文件是否存在,若不存在就创建然后对File package wfu; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Scanner; pu