我认为不可能以一种很好的、100% 绝对兼容的方式做到这一点。Java 实际上试图通过类路径机制将您从文件系统中抽象出来。
不过,您通常可以通过类加载器获取文件路径。第一步是获取对可以找到您感兴趣的任何资源的类加载器的引用(通常,您自己的任何类的类加载器都可以正常工作;如果您有更复杂的场景,您应该希望知道要使用哪个类加载器) .
然后,您可以向类加载器询问给定资源的位置作为 URL,例如:
final ClassLoader loader = getClass().getClassLoader();
final URL resourceLocation = loader.getResource("com/mycomp/coolapp/checkthis.doc");
现在,如果幸运的话,该 URL 将使用该file:/
协议,并将描述您本地文件系统上的一个位置。如果是这样,您可以提取此路径并将其用作您刚刚查找的任何类路径资源的文件系统位置。如果它不是file:/
资源,则该类甚至可能不存在于您的本地计算机上(例如,它正在通过 RMI 远程加载),因此无论如何您都不走运。
如果这听起来很复杂 - 也许您可以将工作目录作为系统属性从您的 Java 启动脚本(例如java ... -Dworking.dir=$(pwd)
)中传递。