相关疑难解决方法(0)

将文件加载为InputStream的不同方法

有什么区别:

InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName)
Run Code Online (Sandbox Code Playgroud)

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)
Run Code Online (Sandbox Code Playgroud)

InputStream is = this.getClass().getResourceAsStream(fileName)
Run Code Online (Sandbox Code Playgroud)

每个人何时比其他人更适合使用?

我想要读取的文件在类路径中作为我的类来读取文件.我的类和文件位于同一个jar中,并打包在EAR文件中,并部署在WebSphere 6.1中.

java inputstream

210
推荐指数
3
解决办法
19万
查看次数

访问pom中定义的maven属性

如何在普通的maven项目和maven插件项目中访问pom中定义的maven属性?

java maven

74
推荐指数
6
解决办法
12万
查看次数

如何从Kotlin的资源中读取文本文件?

我想在Kotlin写一个Spek测试.测试应从该src/test/resources文件夹中读取HTML文件.怎么做?

class MySpec : Spek({

    describe("blah blah") {

        given("blah blah") {

            var fileContent : String = ""

            beforeEachTest {
                // How to read the file file.html in src/test/resources/html
                fileContent = ...  
            }

            it("should blah blah") {
                ...
            }
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

kotlin

66
推荐指数
10
解决办法
4万
查看次数

从Spring Boot中的resources文件夹中读取文件

我正在使用Spring Boot和json-schema-validator.我正在尝试读取jsonschema.json从该resources文件夹调用的文件.我尝试了几种不同的方法,但我无法让它发挥作用.这是我的代码.

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);
Run Code Online (Sandbox Code Playgroud)

这是文件的位置.

在此输入图像描述

在这里,我可以在文件classes夹中看到该文件.

在此输入图像描述

但是当我运行代码时,我得到以下错误.

jsonSchemaValidator error: java.io.FileNotFoundException: /home/user/Dev/Java/Java%20Programs/SystemRoutines/target/classes/jsonschema.json (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

我在代码中做错了什么?

java spring spring-boot json-schema-validator

45
推荐指数
11
解决办法
11万
查看次数

Class.getResource()和ClassLoader.getResource()在可执行jar中的奇怪行为

我理解Class.getResource()和ClassLoader.getResource()之间有什么区别? 从自己的代码,那

getClass().getResource("/path/image.png")
Run Code Online (Sandbox Code Playgroud)

是完全相同的

getClass().getClassLoader().getResource("path/image.png")
Run Code Online (Sandbox Code Playgroud)

发布无法读取jar文件中的图像显示使用的问题

getClass().getClassLoader().getResource("path/image.png")
Run Code Online (Sandbox Code Playgroud)

在可执行jar文件中返回null,而

getClass().getResource("/path/image.png")
Run Code Online (Sandbox Code Playgroud)

返回正确的URL.

Since Class.getResource()代表ClassLoader.getResource()在删除前导斜杠后,我希望这些调用是相同的,但显然它们不是这种情况.即使特殊类加载器附加到特定类,每次调用它仍然应该是相同的,再次导致相同的行为.

所以,问题是:是否存在以下代码在第一次调用时返回null但第二次调用的正确URL的任何明显情况?

package com.example;

import java.net.URL;

public class ResourceTest {

   public void run() {
      URL iconUrl1 = getClass().getClassLoader().getResource("path/image.png");
      System.out.println("ClassLoader.getResource(\"path/image.png\"): " + iconUrl1);

      URL iconUrl2 = getClass().getResource("/path/image.png");
      System.out.println("Class.getResource(\"/path/image.png\"): " + iconUrl2);
   }

   public static void main(String[] args) {
      ResourceTest app = new ResourceTest();
      app.run();
   }
}
Run Code Online (Sandbox Code Playgroud)

java executable-jar classloader embedded-resource

34
推荐指数
1
解决办法
5万
查看次数

什么是Java 9中的开放模块以及如何使用它

模块与open关键字之前和之后有什么区别?
例如:

open module foo {
}

module foo {
}
Run Code Online (Sandbox Code Playgroud)

java java-9 java-module module-info

21
推荐指数
2
解决办法
4713
查看次数

从外部模块访问资源文件

到目前为止,直到非模块化的java,你只需要放入一个文件,src/main/java/resources确保它在classpath中,然后加载它

file = getClass().getClassLoader().getResourceAsStream("myfilename"); 
Run Code Online (Sandbox Code Playgroud)

来自类路径中的任何位置.

现在有了模块,情节变浓了.

我的项目设置如下:

module playground.api {
    requires java.base;
    requires java.logging;
    requires framework.core;
}
Run Code Online (Sandbox Code Playgroud)

配置文件放在里面src/main/resources/config.yml.

项目运行

java -p target/classes:target/dependency -m framework.core/com.framework.Main
Run Code Online (Sandbox Code Playgroud)

由于主类不在我自己的项目中,而是在外部框架模块中,因此无法看到config.yml.现在的问题是,有没有办法以某种方式将我的配置文件放入模块或打开它?我是否必须更改框架上游加载文件的方式?

我尝试在module-info中使用"exports"或"opens",但它想要一个包名,而不是文件夹名.

如何以最佳实用的方式实现这一点,以便它可以像Java 8一样工作,并尽可能少地进行更改?

java java-platform-module-system java-9

16
推荐指数
2
解决办法
5946
查看次数

在war存档中读取文本文件

我正在尝试从我的war存档中读取文本文件,并在运行时在facelets页面中显示内容.我的文件夹结构如下

+ war archive> + resources> + email> + file.txt

我尝试使用以下代码读取resources/email/file.txt文件夹中的文件

File file = new File("/resources/email/file.txt");
BufferedReader reader = null;
try {
    reader = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
StringBuffer buffer = new StringBuffer();
if (reader != null) {
    String line = reader.readLine();
    while (line != null) {
        buffer.append(line);
        line = reader.readLine();
// other lines of code
Run Code Online (Sandbox Code Playgroud)

然而问题是当我运行上面代码的方法时,FileNotFoundException抛出了A. 我也尝试使用以下代码行来获取文件,但是没有成功

File file = new File(FacesContext.getCurrentInstance()
        .getExternalContext().getRequestContextPath() + "/resources/email/file.txt");
Run Code Online (Sandbox Code Playgroud)

我还是得到了 …

java jsf

9
推荐指数
2
解决办法
3万
查看次数

在项目中指定XSD schemaLocation的正确或正确方法是什么?

假设我有两个项目,A和B. Java项目,如果这很重要的话.

项目A包含一堆代表核心类型和元素的XSD文件.它们都放在一个名为"定义"的包中.这内置了project-a.jar.

项目B代表一个扩展项目,允许定义自己的类型和元素.我创建了一个新模式并将其放在"definition.extension"包中.这内置了project-b.jar.

现在,对于项目B中的XSD,我究竟应该把它作为schemaLocation一个include什么?

schemaLocation="../core-types.xsd"没有用(我知道,它需要一个URI),但究竟什么是正确的或标准的方法呢?谷歌发现我有更多的人问这个问题,那就是处理这个问题的正确方法的明确标准方法.

它不能是我schemaLocation在运行期间以编程方式调整...或者我需要一个动态替换schemaLocation编译期间的构建步骤/脚本......对吗?

我不是在寻找像"把它们放在共享位置"这样的答案.我正在寻找更多的开发环境,使用相对引用而不是硬编码引用.

仅供参考,我正在使用IntelliJ IDEA,以防有特定于IDE的方法.

java xsd

8
推荐指数
1
解决办法
3354
查看次数

无法从类路径加载jks文件

我用公共和私有RSA密钥创建了一个JKS文件.当我使用外部路径(如c:/file.jks)加载此文件时,程序就像魅力一样执行.但是,如果我尝试从类路径加载此相同的文件,我得到此异常:

java.io.IOException: Invalid keystore format
Run Code Online (Sandbox Code Playgroud)

这是用于加载jks的代码:

 KeyStore keyStore = KeyStore.getInstance("JKS");
 InputStream stream=this.getClass().getResourceAsStream("/lutum.jks") ;
 keyStore.load(stream,passe);
Run Code Online (Sandbox Code Playgroud)

唯一的区别是我在外部加载时使用FileInputStream和完整路径.我做错了什么?

encryption classpath jks java-8

8
推荐指数
1
解决办法
1万
查看次数