【问题标题】:Read properties file outside JAR file - java 8 not recognizing file读取 JAR 文件外的属性文件 - java 8 无法识别文件
【发布时间】:2016-01-22 09:45:01
【问题描述】:

复制了与以下示例程序相同的场景。

我正在尝试读取位于我的类文件夹之外的文件Test.txt。我正在使用getResourceAsStream 方法来定位文件,但它无法识别。只要我的文件在它识别的类文件夹中。

InputStream propFileInpStream = LocateFile.class.getResourceAsStream("../../../"+PROP_FILE);

不识别是否在类文件夹之外

识别类文件夹结构中的任何位置

【问题讨论】:

    标签: java path java-8 filepath


    【解决方案1】:

    这是正常的,完全可以预料到的。

    Class.getResourceAsStream(name) 尝试查找具有给定名称的资源,而不是任意文件。资源是存在于应用程序类路径中的文件。如果该文件不在类路径中,则不能使用该方法从中检索InputStream

    您可以在Files.newInputStream(path) 的帮助下使用Java NIO.2 API

    打开一个文件,返回一个从文件中读取的输入流。

    此方法将打开一个文件(而不是资源)进行读取。您可以使用静态工厂Paths.get(first, more...) 获取Path 实例。您可以提供文件的绝对路径或相对于 jar 文件位置的路径。

    示例代码:

    try (InputStream propFileInpStream = Files.newInputStream(Paths.get(path))) {
        // do something with the input stream
    }
    

    【讨论】:

      【解决方案2】:

      LocateFile.class.getResourceAsStream 将在类路径中查找文件。

      如果您需要访问类路径之外的文件,则要么将该文件的位置添加到类路径,要么使用绝对路径并使用来自this thread to read it as a stream 的建议。

      【讨论】:

        【解决方案3】:

        你需要对类路径之外的东西做不同的处理。您可能想询问 JVM,您的类的字节码物理存储在哪里,然后从那里导航到您需要的文件。请注意,当类文件存储在 jar 中时,这会有所不同。

        来自http://www.exampledepot.com/egs/java.lang/ClassOrigin.html:(旧链接)

        // Get the location of this class
        Class cls = this.getClass();
        ProtectionDomain pDomain = cls.getProtectionDomain();
        CodeSource cSource = pDomain.getCodeSource();
        URL loc = cSource.getLocation();  // file:/c:/almanac14/examples/
        

        【讨论】:

          【解决方案4】:

          谢谢大家的帮助,我刚刚换了行

          InputStream propFileInpStream = LocateFile.class.getResourceAsStream("..\\\\"+PROP_FILE);
          

          进行以下更改:

          InputStream propFileInpStream = new FileInputStream("..\\\\"+PROP_FILE);
          

          【讨论】:

            猜你喜欢
            • 2019-04-23
            • 2012-02-05
            • 1970-01-01
            • 2019-07-03
            • 1970-01-01
            • 1970-01-01
            • 2016-11-29
            • 2017-11-14
            • 2018-12-23
            相关资源
            最近更新 更多