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

时间:2017-01-17 11:56:04

标签: java inputstream file-access

我最近挖出了一些用于从文件中读取数据的旧代码。它创建了一个输入流,如下所示:

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

filepath在这里是一个字符串。对于本地文件,这很好用,但在尝试读取共享网络驱动器上访问的文件时,我收到一条错误消息,说明该流已关闭。

我改为创建了一个File对象,并改为创建输入流:

InputStream stream = new FileInputStream(file);

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

1 个答案:

答案 0 :(得分:4)

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

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