文件名,目录名或卷标语法不正确 - 如何在属性文件

时间:2017-09-18 19:11:30

标签: java properties

我正在阅读属性文件以获取文件路径,如下所示。

    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"而不是从属性文件中读取路径。在代码中,它读取文件。

您能否建议我在属性文件中使用什么来指定路径?

2 个答案:

答案 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

According to the docs

  

此方法将首先在父类加载器中搜索   资源;如果父级为null,则为内置类加载器的路径   搜索到虚拟机。失败了,这种方法会   调用findResource(String)来查找资源。

该文件位于驱动器的根目录中,该驱动器不会位于类路径或内置于VM的类加载器的路径上。如果这些失败,findResource就是后备。如果没有看到实现,findResource看起来不明确,但它似乎没有注意到C:

解决方案是将属性文件移动到类路径中。通常,您将这样的属性文件放在src/main/resources文件夹中。