代码之家  ›  专栏  ›  技术社区  ›  Chaitanya MSV

如何在Java中从类路径读取文本文件?

  •  413
  • Chaitanya MSV  · 技术社区  · 16 年前

    D:\myDir

    InputStream in = this.getClass().getClassLoader().getResourceAsStream("SomeTextFile.txt");
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("/SomeTextFile.txt");
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("//SomeTextFile.txt");
    

    D:\myDir\SomeTextFile.txt )在CLASSPATH中,尝试上述3行代码。

    null in .

    17 回复  |  直到 16 年前
        1
  •  1
  •   Abhijit Pritam Dutta    6 年前

    使用类路径上的目录,从同一类加载器加载的类中,您应该能够使用以下任一选项:

    // From ClassLoader, all paths are "absolute" already - there's no context
    // from which they could be relative. Therefore you don't need a leading slash.
    InputStream in = this.getClass().getClassLoader()
                                    .getResourceAsStream("SomeTextFile.txt");
    // From Class, the path is relative to the package of the class unless
    // you include a leading slash, so if you don't want to use the current
    // package, include a slash like this:
    InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");
    

    如果这些都不起作用,那就表明还有其他问题。

    例如,以这段代码为例:

    package dummy;
    
    import java.io.*;
    
    public class Test
    {
        public static void main(String[] args)
        {
            InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
            System.out.println(stream != null);
            stream = Test.class.getClassLoader().getResourceAsStream("SomeTextFile.txt");
            System.out.println(stream != null);
        }
    }
    

    code
        dummy
              Test.class
    txt
        SomeTextFile.txt
    

    然后(在Linux机器上使用Unix路径分隔符):

    java -classpath code:txt dummy.Test
    

    结果:

    true
    true
    
        2
  •  1
  •   Boendal Ahmed ALI    5 年前

    使用时 Spring 框架(作为实用程序的集合 容器-您不需要使用后一种功能)您可以轻松使用 资源 抽象。

    Resource resource = new ClassPathResource("com/example/Foo.class");
    

    穿过 资源 您可以通过以下方式访问资源 输入流 , 统一资源定位符 , 统一资源标识符 将资源类型更改为例如文件系统资源是更改实例的简单问题。