Java中从类路径加载资源及示例


资源在运行时起着重要作用,它们提供必要的文件以确保软件平稳运行。这些资源可以通过类路径系统访问,方便读取或写入。为了有效地管理Java程序中的此过程,存在ClassLoader和Class等API,这些API提供各种功能,用于识别应用程序环境中的资源位置并检索相关信息。

算法

  • 步骤1 - 获取当前类的类加载器

  • 步骤2 - 将资源加载为URL/输入流。

    对于选择使用getResource()的人,请确保通过使用getPath()方法有效地转换您的URL。对于那些选择使用getResourcesAsStream()的人,创建Reader或InputStreamReader可能很有用,允许全面检查在所述资源中找到的所有内容。

  • 步骤3 - 读取资源。

  • 步骤4 - 关闭InputStream、Reader或InputStreamReader。

  • 步骤5 - 处理资源加载过程中可能发生的任何异常

方法1:使用getResourceAsStream()方法

加载资源的一种有效方法是使用getResourceAsStream()。以下是一些示例代码,用于说明此方法:

示例

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class ResourceLoader {
   public static void main(String[] args) throws IOException {
      ClassLoader classLoader = ResourceLoader.class.getClassLoader();
      InputStream inputStream = classLoader.getResourceAsStream("example.txt");
      byte[] resourceBytes = inputStream.readAllBytes();
      // Close the InputStream
      inputStream.close();
      // Convert the byte array to a String and print it
      String resourceString = new String(resourceBytes, StandardCharsets.UTF_8);
      System.out.println(resourceString);
   }
}

输出

This is an example resource file.

解释

对于希望从名为example.txt的类路径资源中获取和显示文本数据的人,这段代码可能很有用。但是,请注意,使用getResourceAsStream()将获得InputStream类型的返回值,这必须首先更改为字节数组,然后才能使用String(byte[], Charset)构造函数进行转换。

方法2:使用Collections.swap()

此方法涉及使用getResource()方法。以下是一个代码示例:

示例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class ResourceLoaderExample {
   public static void main(String[] args) throws IOException {
      ClassLoader classLoader = ResourceLoaderExample.class.getClassLoader();
      URL resourceUrl = classLoader.getResource("example.txt");
      InputStream inputStream = resourceUrl.openStream();
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,
      StandardCharsets.UTF_8));
      String line;
      while ((line = reader.readLine()) != null) {
         System.out.println(line);
      }
      reader.close();
      inputStream.close();
   }
}

解释

getResource()方法是从类路径获取资源的有用工具。通过调用此函数,您可以获得资源URL,并使用InputStream和BufferedReader顺序读取其内容。请注意,在此方法中提供路径参数时,它必须相对于类路径的根目录,就像使用getResourceAsStream()一样。

两种方法的比较

方法

方法1

方法2

类型

将文件加载为输入流

将文件加载为URL

方法

getResourceAsStream()

getResource()

方法逻辑

getResourceAsStream()直接返回InputStream。

getResource()返回一个URL对象,可用于获取InputStream或URLConnection。

结论

总而言之,存在多种从Java类路径加载资源的方法,例如使用ClassLoader.getResource()或ClassLoader.getResourceAsStream()。随后,确定使用哪种方法取决于个人的使用标准和应用程序的具体需求。一旦您获得了指向资源文件的InputStream或URL,就可以在读取其内容时应用不同的策略;对于文本文件,可以使用BufferedReader。从类路径加载资源是Java中的一项常见任务,了解如何正确执行此操作对于开发健壮高效的Java应用程序至关重要。

更新于:2023年7月28日

2K+浏览量

启动您的职业生涯

完成课程后获得认证

开始
广告