首先要问自己:文件是应用程序的 内部
组件吗?(这通常意味着它打包在您的JAR或WAR(如果它是一个Web应用程序)中;通常,它是一些配置文件或静态资源,只读)。
如果答案是肯定的,则您不想为文件指定 绝对路径 。但是您都不希望使用 相对路径 访问它(例如您的示例),因为Java假定该路径是相对于“
当前目录 ”的。通常,此方案的首选方法是 相对地从classpath 加载它。
Java 为此提供了
classLoader.getResource()
方法。Eclipse(在常规设置中)假定
src/它位于类路径的根目录中,因此在编译后,它将所有内容复制到输出目录(
bin/)中,并以编译形式(
.class)复制Java文件,而其余部分则保持原样。
因此,例如,如果您将文件放在中
src/Files/myfile.txt,它将在编译时复制到
bin/Files/myfile.txt;并且在运行时
bin/将位于您的类路径(的根目录)中。因此,通过调用
getResource("/Files/myfile.txt")(在某些版本中)您将能够阅读它。编辑
:此外,如果您的文件在概念上与java类相关联(例如,某些文件
com.example.MyClass具有
MyClass.cfg关联的配置文件),则可以使用该类中的getResource()方法并使用(资源)相对路径:
MyClass.getResource("MyClass.cfg")。然后,将在类路径中搜索该文件,但预先添加了类包。因此,在这种情况下,通常会将MyClass.cfg和
MyClass.java文件放在同一目录中。



