这两种创建 InputStream 的方法之间是否存在访问权限差异?

Are there access right differences between these two ways of creating an InputStream?

我最近挖掘了一些从文件中读取数据的旧代码。它创建了一个像这样的输入流:

InputStream stream = 
Thread.currentThread().getContextClassLoader().getResourceAsStream(filepath);

filepath 在这里是一个字符串。对于本地文件,这工作正常,但是当尝试读取在共享网络驱动器上访问的文件时,我会收到一条错误消息,指出流已关闭。

我创建了一个 File 对象,并创建了这样的输入流:

InputStream stream = new FileInputStream(file);

现在可以完美运行了。但是我很好奇。有人建议,当我有我的原始代码行时,该文件根本不存在。但是切换到第二行代码,它显然做到了。第一种方法对访问权限有任何限制吗?它们之间有什么区别?为什么只有第二个可以访问文件?

假设您没有对自定义 Class 加载器做任何聪明的事情,类加载器上的 getResourceAsStream 方法将使用与加载资源相同的规则来加载资源 类:它只会加载类路径中存在的文件。

您得到 null 的事实意味着您正在加载的文件不在类路径中。这是一个共享的网络驱动器是一个红色的鲱鱼。