龙空技术网

java 核心技术-12版 卷Ⅰ- 5.9.3 资源

CC躺平混吃 91

前言:

目前同学们对“java核心技术卷一和卷二区别”可能比较关注,咱们都需要剖析一些“java核心技术卷一和卷二区别”的相关内容。那么小编在网上汇集了一些关于“java核心技术卷一和卷二区别””的相关资讯,希望同学们能喜欢,姐妹们快快来了解一下吧!

原文5.9.3 资源

类通常有一些关联的数据文件,例如:

图像和声音文件。包含消息字符串和按钮标签的文本文件。

在Java 中,这此关联的文件被称为资源(resource)。

​例如,考虑一个显示消息的对话框,如图 5-4 所示。

​当然,对于本书的下一版,这个而板中显示的书名和版权年会改变。为了便于追踪这个变化,我们将把这个文本放在一个文件中,而不是作为一个字符串硬编码写到代码中。

​但是,应该将类似about.txt 的文件放在哪儿呢?当然,将它与其他程序文件一起放在JAR 文件中会很方便

图 5-4 显示图像和文本资源

​Class 类提供了一个很有用的服务可以查找资源文件。下面给出必要的步骤:

获得拥有资源的类的 Class 对象,例如 ResourceTest.class。有些方法(如ImageIcon类的 getImage 方法)接受描述资源位置的 URL。那么,可以调用URL url = cl.getResource("about.gif");否则,使用getResourceAsStream 方法得到一个输入流来读取文件中的数据。

​这里的重点在于 Java 虚拟机知道如何查找一个类,所以它能搜索相同位置上的关联资源。例如,假设 ResourceTest类在一个 resources 包中。ResourceTest.class 文件就位于 resource目录中,可以把一个图标文件放在同一个目录下。

​除了可以将资源文件与类文件放在同一个目录中,还可以提供一个相对或绝对路径,如

data/about.txt

/corejava/title.txt

​文件的自动装载是利用资源加载特性完成的。没有标准的方法来解释资源文件的内容。每个程序必须有自己的方法来解释它的资源文件。

​另一个经常使用资源的地方是程序的国际化。与语言相关的字符串(如消息和用户界面标签)都存放在资源文件中,每种语言对应一个文件。国际化API(intermationalization API)将在卷2的第7章中讨论。它支持一种标准方法来组织和访问这些本地化文件。

​程序清单 5-14 的程序展示了资源加载。(先不用担心读取文本和显示对话框的代码,这

些内容稍后会详细介绍。) 编译、构建一个 JAR 文件执行:

javac resources/ResourceTest.java

jar cvfe ResourceTest.jar resources.ResourceTest resources/*.class resources/*.gif resources/data/*.txt corejava/*.txt

java -jar ResourceTest.jar

​将JAR文件移到另外一个不同的目录中,再次运行,以确认程序是从JAR 文件而不是从当前目录读取资源.

程序清单5-14 resources/.java

package resources;import java.io.*;import java.net.*;import java.nio.charset.*;import javax.swing.*;/** * @version 1.5 2018-03-15 * @author Cay Horstmann */public class ResourceTest{   public static void main(String[] args) throws IOException   {      Class cl = ResourceTest.class;      URL aboutURL = cl.getResource("about.gif");      var icon = new ImageIcon(aboutURL);      InputStream stream = cl.getResourceAsStream("data/about.txt");      var about = new String(stream.readAllBytes(), StandardCharsets.UTF_8);      InputStream stream2 = cl.getResourceAsStream("/corejava/title.txt");            var title = new String(stream2.readAllBytes(), StandardCharsets.UTF_8).strip();      JOptionPane.showMessageDialog(null, about, title, JOptionPane.INFORMATION_MESSAGE, icon);   }}

API java.lang.Class 1.0

URL getResource(String name) 1.1InputStream getResourceAsStream(String name) 1.1找到与类位于同一位置的资源,然后返回一个 URL或者输人流,可以用来加载这个资源。如果没有找到资源,则返回 null,所以不会对 IO 错误抛出异常。

补充说明本节中的例子需要使用随书附送的资源,资源下载地址如下

本书相关代码下载地址

找到 Further Information 节点,

点击 Download Code 后面的 12th edition

会得到一个 corejava.zip 解压到你想要存放的位置

进入 v1ch05,在这里打开CMD 窗口

执行如下命令

javac resources/ResourceTest.java

jar cvfe ResourceTest.jar resources.ResourceTest resources/*.class resources/*.gif resources/data/*.txt corejava/*.txt

java -jar ResourceTest.jar

​即可执行相关代码

标签: #java核心技术卷一和卷二区别 #java核心技术卷一电子版下载