java读取文件的两种方法:java.io和java.lang.ClassLoader
什么时候使用java.io,什么时候使用java.lang.ClassLoader呢?
(注:要是之前读xml文件时清晰知道java读取文件有这两种方法就好了!可以少走很多去理解相对路径
的弯路!)
自己的总结:
*java.io:相对于当前用户目录的相对路径读取;注重与磁盘文件打交道或者纯java project中使用。
(虽然ClassLoader方式更通用,但是如果不是javaEE环境,要定位到classpath路径下去读文件是不合理
的。)
*java.lang.ClassLoader:相对于classpath的相对路径读取;建议在javaEE环境中都使用这种方式。
整理资料一:http://www.code168.com/bbs/html/2005-12-9/23554625833.html
问:
java打成jar包的后续问题!!!!如何在读取jar包里面的配置文件?
答1:
如果用java.util.ResourceBundle就不用担心什么,它本来就是从class loader folder/jar文件里找
properties文件。
如果你已经注意到了,java取文件有两种方法,java.util.io和java.lang.ClassLoader两种。
java.io:
File file = new File("...");
FileInputStream fis = new FileInputStream("...");
FileReader fr = new FileReader("...");
ClassLoader:
ClassLoader loader = XXXClass.class.getClassLoader();
or
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("...");
File file = new File(url.getFile());
InputStream input = loader.getResourceAsStream("...");
这两种,一种是从project loader folder取,一种是从class loader folder取,class loader
folder包括jar文件。
我想你应该明白了吧?自己写个程序test一下就知道了。
答2:
File file = new File(url.getFile());不是用在你这种情况的。
一般情况既然classloader已经拿到resource,就没有必要画蛇添足地再转成File.
转成File事实上是为了拿到绝对路径,我们碰到过这么一种情况。
一个Web application,用tomcat启动,tomcat会建一个application folder,folder下面有一个web-inf
folder,再下面是classes目录,classes目录下面是所有的java classes.程序需要用一个property文件
记录数据,用io package只能定位到绝对路径,用class loader可以是相对路径,不管tomcat在客户电
脑上任何位置,但是,如果写文件在classes folder下面,tomcat会reload web server,页面会重载
。为了定位到application folder,与web-inf并列,先用classloader,再转成file拿到全路径,去掉后
面不需要的folder,就可以拿到 tomecat建的web application的绝对路径。
与你的情况不同的是,classloader定位到的文件,不在jar里头。我认为用java io不可以定到jar里面
。
整理资料二:
Java路径问题最终解决方案
http://www.matrix.org.cn/thread.shtml?topicId=6d0bbeed-9157-11db-ab77-
2bbe780ebfbf&forumId=19
一、相对于当前用户目录的相对路径
就是相对于System.getProperty("user.dir")返回的路径。
对于一般项目,这是项目的根路径。对于JavaEE服务器,这可能是服务器的某个路径。这个并没有统一的
规范!
所以,绝对不要使用“相对于当前用户目录的相对路径”。然而:
默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir
指定,通常是 Java 虚拟机的调用目录。
这就是说,在使用java.io包中的类时,最好不要使用相对路径。否则,虽然在J2SE应用程序中可能还算
正常,但是到了J2EE程序中,一定会出问题!而且这个路径,在不同的服务器中都是不同的!
二、相对于classpath的相对路径
如:相对于
file:/D:/java/eclipse32/workspace/jbpmtest3/bin/这个路径的相对路径。其中,bin是本项目的
classpath。所有的Java源文件编译后的.class文件复制到这个目录中。
三、相对路径最佳实践
推荐使用相对于当前classpath的相对路径
因此,我们在使用相对路径时,应当使用相对于当前classpath的相对路径。
ClassLoader类的getResource(String name),getResourceAsStream(String name)等方法,使用相对于当
前项目的classpath的相对路径来查找资源。
读取属性文件常用到的ResourceBundle类的getBundle(String path)也是如此。
通过查看ClassLoader类及其相关类的源代码,我发现,它实际上还是使用了URI形式的绝对路径。通过得
到当前classpath的URI形式的绝对路径,构建了相对路径的URI形式的绝对路径。(这个实际上是猜想,
因为JDK内部调用了SUN的源代码,而这些代码不属于JDK,不是开源的。)
四、相对路径本质上还是绝对路径
因此,归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是
一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
文章出处:http://www.diybl.com/course/3_program/java/javajs/2008224/100821.html
分享到:
相关推荐
### Java读取文件方法大全:读取File流等技术 在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...
在Java编程中,读写文件是一项基础且重要的任务,...以上就是关于“Java读写文件(txt)”的知识点,包括文件的读取、内容转换、正则匹配以及文件的写入。希望这些内容能帮助你理解和掌握Java在文件操作上的基本技能。
java读取文件大全 写入字节流 读取字节流 在实际运用中相当的广泛 大家共享下资料
在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取...
根据给定的文件信息,我们将深入探讨Java读写文件文本文件的关键知识点,这些知识点主要集中在文件的读取、写入以及流的复制等操作上。 ### Java读取文本文件 在Java中,读取文本文件通常涉及到使用`InputStream`...
Java读写文件-Excel
Java 读写文件避免中文乱码 Java 语言在读写文件时,经常会 gặp到中文乱码的问题。这是因为 Java 默认使用的字符编码是 ISO-8859-1,而中文字符在这个编码中无法正确地表示。为了避免中文乱码,需要使用正确的...
介绍Java直接读取、带缓冲读取、内存映射读取文件,并详细注释。
在Java编程语言中,读写文件是常见的操作,无论是在Web项目中处理用户上传的文件,还是在系统中保存和加载配置数据,都需要对文件进行读取和写入。本篇将围绕“Java读写文件”这一主题,深入探讨相关的知识点。 ...
以下是对Java读取文件的五种方法的详细说明,每种方法都有相应的代码示例: 1. **按字节读取文件内容** 这种方法适用于读取二进制文件,如图片、音频或视频文件。通过`FileInputStream`类,我们可以一次读取一个...
本文将详细解析如何使用Java读取文本文件,基于提供的代码示例,深入探讨其工作原理及最佳实践。 ### Java读取文本文件的基础 在Java中,读取文件主要依赖于`java.io`包中的类,如`FileReader`和`BufferedReader`...
- **FileInputStream** 和 **FileOutputStream** 是字节流的子类,专门用于读写文件。它们提供读取和写入文件的基本功能。 4. **字符流**: - **Reader** 和 **Writer** 是字符流的基类,处理字符数据。 - **...
首先,Java标准库提供了`java.io`包,它包含了一系列用于读写文件的类,如`FileReader`、`FileWriter`等。这些类默认使用平台的默认字符集,这可能导致在不同操作系统上读取同一文件时出现乱码。因此,我们需要明确...
在Java编程语言中,文件的读写操作是基础且至关重要的功能。本示例将深入讲解如何进行简单易懂的文件读写,包括追加内容和处理换行问题。Java的IO流(Input/Output Stream)是实现这一功能的核心工具。 首先,我们...
首先,Java中最基础的文件读取方式是通过`java.io.File`类来创建文件对象,然后使用`java.io.FileInputStream`或`java.io.FileOutputStream`来读写文件。在这个例子中,`ReadFromFile`类中包含两种读取文件的方法:...
在Java编程中,读取文件、对数据进行排序并重新写入文件是常见的操作,尤其在数据处理和分析场景中。下面将详细讲解这个过程,包括相关知识点和具体实现。 首先,我们需要导入Java的`java.io`包,该包包含了处理...
在Java编程语言中,文件的读写操作是日常开发中不可或缺的部分。本实例将深入探讨如何使用Java进行文件的读取和写入操作,这对于处理数据存储、日志记录、配置文件管理等任务至关重要。首先,我们需要理解Java中的几...
在Java编程中,处理大容量文本文件是一项挑战,因为传统的逐行读取方式可能会消耗大量内存,导致程序崩溃。为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行...
本文主要关注如何使用Java来读取文件内容,包括四种常见的读取方式:按字节读取、按字符读取、按行读取以及随机读取。此外,我们还将讨论如何向文件追加内容。 一、按字节读取文件内容 在Java中,`java.io ...
[Java]读取文件方法大全 1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容