Answers:
如果它已经在类路径中,则只需从类路径而不是磁盘文件系统中获取它即可。不要在中摆弄相对路径java.io.File
。它们取决于当前的工作目录,您完全无法从Java代码内部对其进行控制。
假设ListStopWords.txt
与您的FileLoader
课程位于同一包中,请执行以下操作:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
或者,如果您最终想要得到InputStream
的只是其中之一:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
这肯定比创建a优先,new File()
因为url
可能不一定代表磁盘文件系统路径,但也可能代表虚拟文件系统路径(当JAR扩展到内存而不是磁盘文件系统上的temp文件夹时,可能会发生)甚至网络路径,根据定义,这两个路径都不能由File
构造函数消化。
如果文件是-如包名所示- 实际上是一个完全有价值的属性文件(包含key=value
行),且扩展名仅是“错误”,则可以InputStream
立即将其提供给该load()
方法。
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
注意:当您尝试从内部static
上下文中访问它时,请使用FileLoader.class
(或其他方法YourClass.class
)代替getClass()
上面的示例。
FileLoader
是OP自己的自定义类。它应该正是您试图获取资源的类。因此,NameOfYourCurrentClass.class.getResourceAsStream(...)
。ClassLoader.class
如果ClassLoader
类是由其他类加载器加载的,则此操作将失败,这可能会在具有多个类加载器层次结构的“企业”应用程序中发生(例如Java EE Web应用程序)。
如果我们要指定文件的相对路径,可以使用以下行。
File file = new File("./properties/files/ListStopWords.txt");
InputStream
?
InputStream is = new FileInputStream("./properties/files/ListStopWords.txt");
相对路径在Java中使用。操作员。
因此,问题是您如何知道Java当前查找的路径?
做一个小实验
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
观察输出,您将知道java正在查找的当前目录。从那里,只需使用./运算符即可找到您的文件。
例如,如果输出是
G:\ JAVA8Ws \ MyProject \ content。
并且您的文件位于MyProject文件夹中,只需使用
File resourceFile = new File("../myFile.txt");
希望这可以帮助
InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>");
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
.class
只能通过提供类的全名来引用文字。
我可以发表评论,但我的代表较少。萨姆拉特的回答为我做了工作。最好通过以下代码查看当前目录路径。
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
我只是用它来纠正我在项目中面临的问题。确保使用./返回当前目录的父目录。
./test/conf/appProperties/keystore
如果您尝试getClass()
从Static方法或static块调用,则可以执行以下方法。
您可以调用要加载到getClass()
的Properties
对象。
public static Properties pathProperties = null;
static {
pathProperties = new Properties();
String pathPropertiesFile = "/file.xml;
InputStream paths = pathProperties.getClass().getResourceAsStream(pathPropertiesFile);
}
properties.files
的2
吗?