最近遇到在java代码中读取自带文件,只知道可以采用getResourceAsStream,但对具体细节了解不甚详细,在网上查阅了相关资料,对各种情况做了一些汇总,mark一下。
以下是需要读取文件的各种场景:
- 文件和java文件的相对位置,各个properties文件
现在需要读取各个properties文件
测试代码
我们在TestPath.java中读取各个文件,主要采用
Class.getResourceAsStream(String path)
和
Class.getClassLoader().getResourceAsStream(path)
两种方式,测试代码如下:
/**
* Class.getResourceAsStream
*
* @param path
* 各个文件的路径
*/
public static void getResourceAsStream(String path) {
InputStream input = TestPath.class.getResourceAsStream(path);
showPath(input);
}
/**
* Class.ClassLoader.getResourceAsStream
*
* @param path
* 各个文件的路径
*/
public static void classLoadGetResourceAsStream(String path){
InputStream input = TestPath.class.getClassLoader().getResourceAsStream(path);
showPath(input);
}
/**
* print content in per file
* @param input
*/
public static void showPath(InputStream input) {
Properties prop = new Properties();
if (null == input) {
throw new RuntimeException("can not load properties: " + input);
}
try {
prop.load(input);
input.close();
for (Entry<Object, Object> entry : prop.entrySet()) {
System.out.println(entry.getKey().toString() + "="
+ entry.getValue().toString());
}
} catch (IOException e) {
throw new RuntimeException("can not read properties: " + input);
}
}
两种方式和文件路径的具体写法
:
- 在TestPath.java中采用Class.getResourceAsStream()
public static void testGetResourceAsStream() {
System.out.println("文件与当前class在同一目录");
getResourceAsStream("current_path.properties");
getResourceAsStream("/com/java/path/test/current_path.properties");
System.out.println("文件在当前class上级目录");
getResourceAsStream("../parent_path.properties");
getResourceAsStream("/com/java/path/parent_path.properties");
System.out.println("文件与当前class在不同的package");
getResourceAsStream("/com/java/pathanother/another_package.properties");
System.out.println("文件在class根目录");
getResourceAsStream("/root_path.properties");
System.out.println("文件位于的依赖第三方包");
getResourceAsStream("/META-INF/maven/commons-logging/commons-logging/pom.properties");
}
输出:
文件与当前class在同一目录
path=com.java.path.test
path=com.java.path.test
文件在当前class上级目录
path=com.java.path
path=com.java.path
文件与当前class在不同的package
path=com.java.pathanother
文件在class根目录
path=toot
文件位于的依赖第三方包
version=1.1.1
groupId=commons-logging
artifactId=commons-logging
- 采用Class.ClassLoader.getResourceAsStream
public static void testClassLoadGetResourceAsStream() {
System.out.println("文件与当前class在同一目录");
classLoadGetResourceAsStream("com/java/path/test/current_path.properties");
System.out.println("文件在当前class上级目录");
classLoadGetResourceAsStream("com/java/path/parent_path.properties");
System.out.println("文件与当前class在不同的package");
classLoadGetResourceAsStream("com/java/pathanother/another_package.properties");
System.out.println("文件在class根目录");
classLoadGetResourceAsStream("root_path.properties");
System.out.println("文件位于的依赖第三方包");
classLoadGetResourceAsStream("META-INF/maven/commons-logging/commons-logging/pom.properties");
}
输出:
文件与当前class在同一目录
path=com.java.path.test
文件在当前class上级目录
path=com.java.path
文件与当前class在不同的package
path=com.java.pathanother
文件在class根目录
path=toot
文件位于的依赖第三方包
version=1.1.1
groupId=commons-logging
artifactId=commons-logging
分享到:
相关推荐
如果你想要从这个Java文件读取`yyy.properties`,假设它位于`src\env`目录,那么正确的相对路径应该是`./src/env/yyy.properties`。这里,`.`代表当前目录,也就是`src\come\home\basic`,然后你向这个目录添加相对...
在Java中,处理文件时通常会遇到两种类型的路径:**相对路径**与**绝对路径**。 - **相对路径**:指的是相对于当前工作目录或类路径(Classpath)的一种路径表示方式。 - **绝对路径**:则是一种完整地指明文件位置...
2. 使用`Class.getResourceAsStream`(相对路径): ```java InputStream inputStream = Test.class.getResourceAsStream("abc.jpg"); ``` 3. 使用`ClassLoader.getResourceAsStream`: ```java InputStream ...
在Java Web开发中,理解和掌握相对路径与绝对路径的运用是至关重要的,因为这直接影响到资源定位、页面跳转以及文件读写等操作的正确性。以下是对Java Web中相对路径与绝对路径问题的深入总结: ### 一、路径概念与...
本文将深入探讨Java中的相对路径,这是在处理文件和目录时经常会遇到的一个关键主题。相对路径是相对于当前工作目录或某个已知起点的文件或目录的路径表示方式,与绝对路径(完整描述文件或目录位置的路径)相比,...
1. 相对类路径:如果你的Properties文件与Java源代码位于同一目录结构下,可以使用`getResourceAsStream()`方法,配合类路径来加载。例如: ```java InputStream in = getClass().getResourceAsStream("/config....
- 在Java中读取文件时,可以使用相对路径或绝对路径。如果文件在`src`目录下,且你的代码在同一目录层次,可以使用相对路径。否则,可能需要使用绝对路径,或者利用类路径的特性。 5. **使用`ClassLoader`读取资源...
该方法有两个参数,第一个参数是文件的相对路径,第二个参数是 Class 对象。相对路径可以是相对于当前类所在的包的路径,也可以是绝对路径。如果路径以 "/" 开头,则表示绝对路径,否则表示相对路径。 例如,...
在 Java 项目中,获取相对路径可以使用 `getResource` 方法。这个方法可以返回当前类的相对路径。在静态方法中,可以使用 `Test.class.getResource("").getPath()`,而在非静态方法中,可以使用 `this.getClass()....
本项目涉及的关键知识点主要包括文件写入、项目相对路径、Java反射以及模板数据写入。这些技术都是构建复杂应用时不可或缺的部分。 首先,我们要了解文件写入。在Java中,我们可以使用`java.io`包下的`FileWriter`...
这对于构建相对路径或在不同的应用之间共享资源时非常有用。 #### (3) 获取当前页面的目录全名:`request.getServletPath()` 此方法返回请求的Servlet路径,即`http://example.com/TEST/jsp/test.jsp`中的`/jsp/...
解决这个问题的方法是确保路径的正确性,可以使用绝对路径或者相对路径,并且检查文件是否真的存在于该路径下。 接下来,我们讨论写入Properties文件的问题。写入过程基本如下: 1. 创建Properties对象(如果还...
Java文件路径操作是Java开发中常见且重要的任务,无论是在读写文件、处理资源还是进行系统交互时,都需要对文件路径进行操作。本篇将详细探讨Java中的文件路径处理技术,主要涵盖以下知识点: 1. **File类**: ...
本文将深入探讨如何使用Java读取资源文件,特别是properties类型的文件。 资源文件通常存储在项目的类路径(classpath)下,可以是.properties、.txt、.xml等形式,它们提供了与代码分离的配置选项。对于....
4. **读取相对路径**: - 可以使用`getClass().getResourceAsStream(filePath)`,其中`filePath`可以是`"/filename"`,这里的 `/` 代表 Web 发布根路径下的 `WEB-INF/classes`。 5. **获取文件真实路径**: - ...
在Java中,文件路径可以是绝对路径或相对路径。绝对路径是从根目录开始的完整路径,它指明了文件的确切位置。相对路径则是相对于当前工作目录的路径,它的解析依赖于程序运行时的工作目录。在处理文件路径时,开发者...
10. **文件路径**:在Java中,文件路径可以是相对路径或绝对路径。相对路径是相对于当前工作目录的,而绝对路径是从根目录开始的完整路径。 以上就是关于Java写文件的基本知识,理解并熟练掌握这些概念和方法,将能...
在Java编程中,读写文本文件(如`.txt`文件)是常见的操作,尤其是在处理配置文件时。配置文件通常以键值对(key-value pairs)的形式存储数据,便于程序访问和管理设置。以下是对这个主题的详细阐述: 1. **Java I...
- 在Java中,文件路径可以是相对路径或绝对路径。使用`file.getAbsolutePath()`获取绝对路径。 以上就是Java进行文件读写操作的基础知识。在实际开发中,还需要根据具体需求选择合适的方法和策略,如处理大文件时...
文件的路径通常有 相对路径 与 绝对路径。 2.1 相对路径 以当前文件为基准进行一级级目录指向被引用的资源文件。在 Java 代码中以当前运行的代码所在的位置为参照位置,只要被引用的文件相对于引用的文件的位置不变...