【发布时间】:2013-06-06 07:47:42
【问题描述】:
我目前正在为我的计算机科学决赛制作一个简单的小型 Java 程序,它需要获取当前正在运行的课程的路径。类文件位于 C:\2013\game\ 文件夹中。
为了得到这个路径,我在我的主类构造函数中调用了这个代码段:
public game(){
String testPath = this.getClass().getResource("").getPath();
//Rest of game
}
但是,尽管正确的输出为“C:/2013/game”,但此命令却返回此字符串:“/” 此外,我试图通过使用以下代码来纠正这个问题:
public game(){
String testPath = this.getClass().getClassLoader().getResource("").getPath();
}
这返回一个 NullPointerException,它源于 getClassLoader() 返回 null 的事实,尽管在我的 Eclipse IDE 上工作。有什么想法吗?
【问题讨论】:
-
为什么不把类名传给
getResource()? -
“当前运行类的路径”在 Java 中没有明确定义(可能是 URL,但也可能完全来自内存,因此不可能有路径)。这听起来像a XY problem。您实际上想解决什么问题?
-
确实,对于您错误地认为问题中所述的解决方案将是正确的解决方案的根本问题,您肯定需要寻找不同的解决方案。特定的解决方案毫无意义,即使它在特定情况下工作,它也会使您的应用程序完全不可移植(即它在系统 X 中运行,但不在 Y、Z 等系统中运行)。我猜
java.util.prefs.Preferences是您最终需要的。迄今为止发布的所有继续这个愚蠢解决方案的答案都是天真的。我建议忽略它们。 -
@Joachim Sauer 我正在尝试访问与类文件位于同一文件夹中的数据文件夹。因此,我需要获取当前运行类的路径。
-
@user2465495:如果你想从类路径中读取数据,你应该通过
getResource()直接使用它,而不是使用FileAPI(因为在部署中,您的类和资源通常不是文件(例如,ZIP 文件中的条目)。
标签: java classloader filepath