【问题标题】:Getting jar specific path as string获取 jar 特定路径作为字符串
【发布时间】:2014-04-25 16:40:31
【问题描述】:

我的包结构如下: 源/xxx/ src/yyy/

我在包 src/xxx/ 中有一个类,我们称之为classA.java,我需要获取 src/yyy/ 的路径,我该怎么做?我试过了

String s = classA.class.getResourcesAsStream("/yyy/").toString();

但它没有工作.. 我需要它作为String,因为我用该路径创建了一个新的FileReader

【问题讨论】:

    标签: java jar io filereader


    【解决方案1】:

    我有点不清楚你想做什么。但如果文件在 jar 文件中,FileReader 无论如何都不会工作 - 就操作系统而言,您没有 文件。您应该只使用getResourceAsStream,然后将InputStream 包装在InputStreamReader 中。这样您还可以指定字符编码 - 即使我 am 使用文件,我也因此使用 FileInputStreamInputStreamReader

    所以你想要这样的东西:

    try (Reader reader = new InputStreamReader(
             ClassA.class.getResourceAsStream("foo.txt"),
             StandardCharsets.UF_8)) { // Or whichever encoding is appropriate
        // Read from the reader
    }
    

    【讨论】:

      【解决方案2】:

      修改以下代码以使用 FileReader

      public class Demo 
      {
      public static void main( String[] args ) {
      
          ClassLoader cl = Thread.currentThread().getContextClassLoader();
      
          InputStream is = cl.getResourceAsStream("yyy/FILENAME");
          if (is != null) {
              BufferedReader reader = new BufferedReader(new InputStreamReader(is));
              try {
                  System.out.println(reader.readLine());
              }
              catch(Exception ex) {
                  ex.printStackTrace();
              }
          }
      
      }
      }
      

      【讨论】:

      • 你的第一句话没有意义 - 为什么你会建议使用 FileReader 当它不起作用时? (此外,异常处理很糟糕,您没有指定字符编码,也没有关闭流,但这些都与重点稍有不同。)
      • @Jon Steek `这些与主要观点稍有不同` - 这就是重点。 OP也应该付出一些努力
      • 所以你是在故意创建糟糕的代码?我看不出这对将来会看到这一点的许多读者有什么帮助。哦,这里没有明显的理由使用上下文类加载器。
      • (我关于第一句话的观点仍然存在 - 这个问题的关键 IMO 是,如果没有正常文件系统意义上的文件,FileReader 根本就没有去上班。)
      • 你能解释一下什么是ClassLoader
      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 2023-03-15
      • 2014-07-21
      相关资源
      最近更新 更多