由于可移植性问题,Java 加载资源(图像、音频、文本文件等)而不使用 "/"符号并使用 File.separator

标签 java io resources portability getresource

我正在重写我的类,以在游戏中加载资源。我的教授告诉我们在加载资源时尽量不要在字符串/文件/URL 中使用“/”斜杠符号。我正在使用 Classname.class.getResource(someString) 来获取 URL,这样我就可以加载效果很好的资源(请参阅下面的代码)。我阅读了 class.getResource() 的 Oracle 文档,其中我必须使用 "/"。我想知道是否有比使用 ClassName.class.getResource() 更好的加载资源(主要是图像和音频文件)的方法?我对速度或内存没有任何要求。下面是我如何加载 BufferedImage 的示例。

    try {
        // Example path = "/menu/background2.png"
        sourceImage = ImageIO.read(ResourceManager.class.getResource(path));


    } catch (IOException e) {
        System.out.println("Failed to load: " + path);

        e.printStackTrace();

    }

最佳答案

您可以在路径中使用斜杠,但不能使用反斜杠,因为您没有使用文件路径,而不是类路径中的路径。如果您想要类的相对路径,请不要使用前导斜杠。当您使用文件路径时,您可以在路径中使用 File.separator ,但是在 URL 中您仍然可以使用斜杠。更重要的是,File.separator 在 URL 中的使用是错误的,因为它在需要转义反斜杠符号以在 URL 中使用的 Windows 系统上不起作用。

关于由于可移植性问题,Java 加载资源(图像、音频、文本文件等)而不使用 "/"符号并使用 File.separator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566691/

相关文章:

java - 为什么 JTable 不显示用户输入?

python - 通过短时间运行的流程并获得输出的最轻松的方式是什么?

android - 异常试图读取原始资源文件 [Android]

java - 扫描仪与 OutputStreams 的兼容性

C fgets 与 fgetc 读取行

ios - 如何在 iOS 中将图像从资源中分离出来

c++ - 共享库 QT 资源

java - 找不到符号变量 main

java - Jackson:InvalidFormatException:无法从字符串值构造 java.util.Date 的实例

java - 在 Slick2D 上只显示图像的一半?