我正在阅读属性文件以获取文件路径,如下所示。
String result = "";
InputStream inputStream = null;
try {
Properties prop = new Properties();
String propFileName = "config.properties";
inputStream = GetPropertyValues.class.getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
prop.load(inputStream);
} else {
throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
}
属性文件的路径如下所示。
configSettingsFilePath = C:\\\\ConfigSetting.xml
现在,当我运行代码时发现文件未找到时,我得到以下异常。
Creating instance of bean 'configSettingHelper'
configSettingsFilePath = C:\ ConfigSetting.xml 2017-09-18 14:47:00 DEBUG ConfigSettingHelper:42 - ConfigSettingHelper :: ConfigSetting文件:configSettingsFilePath = C:\ ConfigSetting.xml javax.xml.bind.UnmarshalException - 链接异常: [java.io.FileNotFoundException:C:\ Java \ eclipse \ eclipse \ configSettingsFilePath = C:\ ConfigSetting.xml(文件名,目录名或卷标语法不正确)] at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:246) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:214) 在javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157) 在javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162) 在javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171) 在javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189)
如果我直接使用" C:\ ConfigSetting.xml"而不是从属性文件中读取路径。在代码中,它读取文件。
您能否建议我在属性文件中使用什么来指定路径?
答案 0 :(得分:1)
仅在.jar运行时读取文件失败。 从Netbeans内部运行应用程序很好。 (不同路径)
此外,路径来自
URL resourceURL = MyClass.class.getResource("mydir/myfile.txt");
打印出路径是完美的。
此外,同一目录中的mypicture.gif加载正常:
ImageIcon mypicture = new ImageIcon(imageURL, description)).getImage();
即使在运行.jar时也是如此。 IE:实际路径必须正常。
这只是我尝试通过
阅读的文本文件InputStream input = new FileInputStream(fileName);
是失败的时候 - 只有它在罐子里。
答案 1 :(得分:0)
这可能是因为C:\
不在类路径上。您使用的getClassLoader()
可能会返回ClassLoader
。
ClassLoader#getResource
的
此方法将首先在父类加载器中搜索 资源;如果父级为null,则为内置类加载器的路径 搜索到虚拟机。失败了,这种方法会 调用findResource(String)来查找资源。
该文件位于驱动器的根目录中,该驱动器不会位于类路径或内置于VM的类加载器的路径上。如果这些失败,findResource
就是后备。如果没有看到实现,findResource
看起来不明确,但它似乎没有注意到C:
。
解决方案是将属性文件移动到类路径中。通常,您将这样的属性文件放在src/main/resources
文件夹中。