Java getClassLoader().getResourceAsStream方法对于包含“0”的文件返回null;。LIB";延伸
我正在尝试使用从资源/路径加载文件Java getClassLoader().getResourceAsStream方法对于包含“0”的文件返回null;。LIB";延伸,java,jvm,Java,Jvm,我正在尝试使用从资源/路径加载文件 getClassLoader().getResourceAsStream("file.LIB") 但是该方法总是返回null,除非我将文件重命名为另一个扩展名,比如“.dll” 我已经查阅了官方Java文档,但没有结果 为什么该方法在该文件类型上的行为很奇怪 注意:我使用的是JDK 1.8.0_111 x86(由于该lib文件的限制,它只能在32位JVM中正常工作)它确实适合我,您需要确定您对lib文件的具体操作 import java.io.IOExcep
getClassLoader().getResourceAsStream("file.LIB")
但是该方法总是返回null,除非我将文件重命名为另一个扩展名,比如“.dll”
我已经查阅了官方Java文档,但没有结果
为什么该方法在该文件类型上的行为很奇怪
注意:我使用的是JDK 1.8.0_111 x86(由于该lib文件的限制,它只能在32位JVM中正常工作)它确实适合我,您需要确定您对lib文件的具体操作
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class FileHelper {
public String getFilePathToSave() {
Properties prop = new Properties();
String filePath = "";
try {
InputStream inputStream =
getClass().getClassLoader().getResourceAsStream("abc.lib");
prop.load(inputStream);
filePath = prop.getProperty("json.filepath");
} catch (IOException e) {
e.printStackTrace();
}
return filePath;
}
public static void main(String args[]) {
FileHelper fh = new FileHelper();
System.out.println(fh.getFilePathToSave());
}
}
你确定这个文件在你的类路径中吗?顺便说一句,当您以这种方式打开文件时,没有理由使用32位或64位JVM,它只在加载共享库时才起作用。是的,我确定,因为当文件在同一路径中重命名时,它会被加载。此外,我还有其他需要32位jvm(用于使用Prolog的共享库)的dll。该库是它们的一个依赖项。如果DLL需要另一个文件,您不需要使用类路径读取它,而类路径不是DLL加载它所使用的路径。为了使用System.loadLibrary加载库,我有一个DLL和一组文件需要在我的类路径上。因此,在启动时,我从项目的资源文件夹加载它们并将它们复制到相关路径,而不是强制用户手动执行/编写安装脚本。但这与我的问题无关。为什么类加载器不能很好地处理.lib文件扩展名,也没有任何例外?共享库使用的是路径而不是类路径。