当前位置: 首页 > 知识库问答 >
问题:

Spring Boot -使用资源加载器读取文本文件

仲孙温文
2023-03-14

我尝试使用Spring资源加载程序读取文本文件,如下所示:

Resource resource  = resourceLoader.getResource("classpath:\\static\\Sample.txt");

当在eclipse中运行应用程序时,它工作得很好,但是当我将应用程序打包,然后使用Java–jar运行它时,我得到了file not found异常:

java.io.FileNotFoundException: class path resource [static/Sample.txt] cannot be resolved to absolute file path because it does not reside in the
 file system: jar:file:/C:/workspace-test/XXX/target/XXX-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static/Sample.txt

我解压了示例所在的Jar文件:XXX-0.0.1-SNAPSHOT\BOOT-INF\classes\static\Sample.txt

有人能帮助我吗?

提前感谢!

共有3个答案

班玉堂
2023-03-14

我也有同样的问题,正如@Gipple Lake解释的那样,使用Spring boot,你需要将文件作为inputStream加载。因此,下面我将添加我的代码作为示例,在那里我要读取import.xml文件

public void init() {
    Resource resource = new ClassPathResource("imports/imports.xml");
    try {
        InputStream dbAsStream = resource.getInputStream();
        try {
            document = readXml(dbAsStream);
            } catch (SAXException e) {
                trace.error(e.getMessage(), e);
                e.printStackTrace();
            } catch (ParserConfigurationException e) {
                trace.error(e.getMessage(), e);
                e.printStackTrace();
            }
    } catch (IOException e) {
        trace.error(e.getMessage(), e);
        e.printStackTrace();
    }
    initListeImports();
    initNewImports();
}

public static Document readXml(InputStream is) throws SAXException, IOException,
      ParserConfigurationException {
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

      dbf.setValidating(false);
      dbf.setIgnoringComments(false);
      dbf.setIgnoringElementContentWhitespace(true);
      dbf.setNamespaceAware(true);
      DocumentBuilder db = null;
      db = dbf.newDocumentBuilder();

      return db.parse(is);
  }

添加了“imports.xml”下面src/main/ressource/import

董高朗
2023-03-14

请尝试 resourceLoader.getResource(“classpath:static/Sample.txt”);

使用< code>java -jar XXXX.jar运行时使用此代码

------更新------

检查代码后,问题是您试图通过<code>FileInputStream

但实际上你得到了组织.Spring框架.core.io.资源 所以意味着你得到了输入流,所以你可以像新的缓冲阅读器(新的输入流阅读器(资源.getInputStream()).readLine();

顾英发
2023-03-14

我已经检查了你的代码。如果您想从Spring Boot JAR中的类路径加载文件,那么您必须使用< code > resource . getinputstream()而不是< code>resource.getFile()。如果您尝试使用< code>resource.getFile()您将会收到一个错误,因为Spring试图访问一个文件系统路径,但是它不能访问您的JAR中的路径。

详情如下:

https://smarterco.de/java-load-file-classpath-spring-boot/

 类似资料:
  • 问题内容: 我正在尝试在Android Studio的res \ raw文件中保留一个.txt文件,并读取/解析该文件。我在“ res”目录(未创建)中创建的名为“ raw”的文件夹中有一个文件“ my_file.txt”。 我认为我的主要问题是:创建File对象(与Scanner对象一起使用)时,应该为文本文件传递什么路径? 这是我的代码: 问题答案: 认为您正在寻找符合以下条件的东西 其中ct

  • 传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用: <script type='text/javascript' src='/static/js/common.js'> <link rel="stylesheet" type="text/css" href="/static/css/style.css" /> 系统提供了专门的标签来简化上面的导入: {load href="/stati

  • 我有一个文本文件(.txt),我想成为以后可以扫描的资源。 在pubspec.yaml,我已经确保: 存在。该文件位于我创建的文件夹中,与和处于同一级别 我试图从自定义类读取文件,而不是小部件。 根据文档,我将使用此导入: 然后开始这样读: 要获得实际数据,请执行以下操作: 但是,当我使用

  • 我在maven项目的src/main/resource文件夹中下载了.sh文件,我正在通过下面的代码阅读它 如果我使用jar EX作为应用程序运行:- java-jar runscript.jar SCHEMA_NAME /users/ideaprojects/runscript/target/file:/users/ideaprojects/runscript/target/runscripts

  • 问题内容: 是否有任何实用程序可帮助将资源中的文本文件读取为字符串。我想这是一个很普遍的要求,但是在谷歌搜索之后我找不到任何实用程序。 问题答案: 是的,番石榴在课堂上提供了这一点。例如:

  • 我有一个名为的项目,它有以下结构: 所以这两个文件的路径是: 我想读测试文件。TestDataProvider中的json。JAVA 我曾经用过 我看到从URL res=getClass(). getClassLoader(). getResources("testfile.json")返回; 有人能帮我吗?