我最近挖出了一些用于从文件中读取数据的旧代码。它创建了一个输入流,如下所示:
InputStream stream =
Thread.currentThread().getContextClassLoader().getResourceAsStream(filepath);
filepath
在这里是一个字符串。对于本地文件,这很好用,但在尝试读取共享网络驱动器上访问的文件时,我收到一条错误消息,说明该流已关闭。
我改为创建了一个File对象,并改为创建输入流:
InputStream stream = new FileInputStream(file);
现在它完美无缺。但我很好奇。当我有原始的代码行时,有人建议该文件根本不存在。但切换到第二行代码,显然确实如此。使用第一种方法对访问权限有任何限制吗?他们之间有什么区别?为什么只有第二个访问文件?
答案 0 :(得分:4)
假设您没有使用自定义类加载器做任何聪明的操作,类加载器上的getResourceAsStream
方法将使用与加载类相同的规则来加载资源:它只会加载存在于类路径。
您获得null
的事实意味着您加载的文件不在类路径中。这是一个共享的网络驱动器是一个红色的鲱鱼。