我目前正在为我的计算机科学决赛制作一个简单的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上工作。任何想法?
答案 0 :(得分:8)
如果你想在与代码相同的路径中加载文件,那么我建议你把它放在与代码相同的根文件夹中,而不是与类相同的路径。
原因:类可以放在jar中,数据文件可以放在同一个jar中,但是编辑和更新起来比较困难。
还建议你看一下评论中建议的偏好类:http://www.javacodegeeks.com/2011/09/use-javautilprefspreferences-instead-of.html虽然在某些情况下我认为可以拥有自己的数据/ excel / csv / java.util.Properties文件
不确定为什么它在eclipse中工作但是我建议你专注于从命令提示符/终端运行它,因为它是“真实模式”,当它上线时
你可以问你的班级
String s = getClass().getName();
int i = s.lastIndexOf(".");
if(i > -1) s = s.substring(i + 1);
s = s + ".class";
System.out.println("name " +s);
Object testPath = this.getClass().getResource(s);
System.out.println(testPath);
这会给你
name TstPath.class 文件:/java/Projects/tests3b/build/classes/s/TstPath.class
这是我的eclipse构建路径......
需要解析它以获取加载类的路径。
记住:
您想要应用路径: -
文件f =新文件(“./”);
f.getCanonicalPath(); // ...
因此,可以从文件夹c:\ app1 \ run \
启动应用程序jar可以在c:\ app1 \ libsMain \ myapp.jar
和辅助jar可以在c:\ commonlibs \ set1
所以这只会告诉你JVM在哪里找到你的课程,这可能是也可能不是你需要的。
如果在jar中你会在unix或windows中给你一些这样的东西
罐:文件:C:\应用\ my.jar /s/TstPath.class
如果包是s并且类是TstPath,那么你可以确定这将会起作用,因为类必须在那里......
现在解析这个你可以找到你的类名并删除/或\直到你得到你想要的路径。 String lastIndexOf将帮助
答案 1 :(得分:3)
您可以使用:
URL classURL = getClass().getProtectionDomain().getCodeSource().getLocation();
答案 2 :(得分:1)
ClassLoader loader = Test.class.getClassLoader();
System.out.println(loader.getResource("Test.class"));
也
Test.class.getProtectionDomain().getCodeSource().getLocation().getPath());
答案 3 :(得分:1)
对getResource([String])
的调用需要一个相对于包含调用它的类的文件夹的路径。因此,如果您有以下内容,则传递到MyClass.class.getResource([path]);
的任何内容都必须是相对于com/putable/
包文件夹的有效路径,并且必须指向真实文件:
package com.putable;
public class MyClass{}
使用空字符串无效,因为永远不会有一个等于空字符串的文件名。但是,你可以做getResource(getClass().getSimpleName())
。只需从该调用返回的路径末尾删除文件名,您就可以拥有所需的类目录。
答案 4 :(得分:0)
试试这个。
import java.io.File;
public class TT {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String path = TT.class.getResource("").getPath();
File file = new File(path);
System.out.println(file.getAbsolutePath());
}
}
答案 5 :(得分:0)
尝试使用此代码
public game()
{
String className = this.getClass().getSimpleName();
String testPath = this.getClass().getResource(className+".class");
System.out.println("Current Running Location is :"+testPath);
}
访问该链接以获取更多信息 Find where java class is loaded from
答案 6 :(得分:0)
在类路径中打印文件的绝对路径,即build / resources / main / someFileInClassPath.txt免责声明,这类似于此页面上使用TT.class的另一个解决方案...,但这对我不起作用相反,TT..getClassLoader()......确实对我有用。
undefined