classloader的getResourceAsStream方法获取文件流为null?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了classloader的getResourceAsStream方法获取文件流为null?相关的知识,希望对你有一定的参考价值。

InputStream is = this.getClass().getResourceAsStream( CONFIG_FILENAME );

这行代码所在的类在服务器启动的时候会加载到,方法也能正常返回文件流。
但是当我使用测试类调用这个类的时候 这行代码获取为null

我在想是不是我测试类获取的classpath路径不对还是怎么的,文件的路径也是对的,百思不得其解。求高手

你的环境不一样,当然有可能取不到,服务器上的CONFIG_FILENAME文件是存在的, 你本地测试的这个路径不存在呗追问

上面那行代码在一个工具类里,这个类的class文件和CONFIG_FILENAME都在项目的classes目录下,我的测试类是调用这个工具类,这个工具类里在执行这段代码,他们的环境应该是一样的吧。

追答

CONFIG_FILENAME应该是个路径,就要看是相对路径还是绝对路径了。做个简单的测试试,打印出CONFIG_FILENAME的内容,确认下你的本地包里是否有次文件。

参考技术A 传入的路径不正确。

an absolute resource name is constructed from the
given resource name using this algorithm:
1 If the name begins with a '/'
('\u002f'), then the absolute name of the resource is the
portion of the name following the '/'.
2 Otherwise, the absolute name is of the following form:
modified_package_name/name

Where the modified_package_name is the package name of this
object with '/' substituted for '.'
('\u002e').

FLinkaccess closed classloader classloader.check-leaked-classloader

1.概述

本日在一个环境提交flink任务,这个flink任务原先适配了一下,使用的是flink 1.9.1,然后本次适配是使用 flink 1.12 然后提交任务的时候报错

Exception in thread "Thread-6" java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the stacktrace suggests that the leak occurs in a third party library and cannot be fixed immediately, you can disable this check with the configuration \'classloader.check-leaked-classloader\'.

详情信息如下

Exception in thread "Thread-6" 

以上是关于classloader的getResourceAsStream方法获取文件流为null?的主要内容,如果未能解决你的问题,请参考以下文章

ClassLoader

ClassLoader 详解及用途(写的不错)

classloader加载class的流程及自定义ClassLoader

ClassLoader工作机制

ClassLoader 详解及用途

Java类加载器( CLassLoader ) 死磕 3: 揭秘 ClassLoader抽象基类