如何从Java中的类路径真正读取文本文件
我正在尝试读取在CLASSPATH系统变量中设置的文本文件。不是用户变量。
我正在尝试将输入流传输到文件,如下所示:
将文件(D:\myDir
)的目录放在CLASSPATH中,然后尝试以下操作:
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
进入InputStream in
。
回答:
在类路径上的目录中,从同一类加载器加载的类中,你应该能够使用以下任一种:
// 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
结果:
truetrue
以上是 如何从Java中的类路径真正读取文本文件 的全部内容, 来源链接: utcz.com/qa/407955.html