2013-05-06 145 views
0

我有一个小问题,试图找出我的路径问题的最佳解决方案。我正在运行一个java测试,我想获得两件事情。Java获取当前路径

  1. 运行

我想正确的项目

  • 绝对位置当前类文件的绝对位置/或\正对OS版本,以便文件夹结构保持不变。我目前正在使用这个,但它不完全是我正在寻找

    final String parentDir = System.getProperty("user.dir"); 
    final String path = "src/test/java/" + method.getDeclaringClass() 
        .getCanonicalName().replaceAll("\\.", "/") + ".java"; 
    

    任何帮助,将不胜感激。谢谢

    更新:我想获取预编译代码的URL,因为我需要访问代码中的注释。这可能会改变你的一些人的答案

    更新2:好的我得到它的工作。

    final String path = new File(getClass().getResource("/").getFile()) 
          .getParent().split("target")[0] + "src/test/java/" + method 
          .getDeclaringClass().getCanonicalName() 
          .replaceAll("\\.", "/") + ".java"; 
    

    谢谢你们

  • +2

    你可以得到本地分隔符看看这个链接。 http://stackoverflow.com/questions/8075373/file-separator-vs-filesystem-getseparator-vs-system-getpropertiesfile-separa – Elmer 2013-05-06 19:26:39

    +0

    当前代码的改进不大:使用replace('。','/')'而不是'replaceAll(“\\。”,“/”)'来避免正则表达式引擎。 – Pshemo 2013-05-06 19:30:30

    +0

    获取项目的绝对位置尝试打印到控制台以下:System.out.println(new File(“。”)。getAbsolutePath()); – Mike 2013-05-06 19:40:43

    回答

    0

    如果说你是从jar文件运行:

    new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParent()+"/" 
    

    返回包含的jar文件的文件夹。

    删除上述.getParent()得到的确切class文件

    +0

    尝试了你的命令,我得到了以下/ Users/john/work/development/automation/product/store/target/ – jrock2004 2013-05-06 21:39:07

    +0

    是不是包含ur类的路径?也为项目文件夹'新文件(“。”);'会做。 – Jatin 2013-05-07 05:41:24

    1

    既然你是从MyClass的调用这个路径,你应该叫 File directory = (new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath())).getParentFile();

    我有同样的问题一次。除了Jatin的回答之外,我必须添加toURI()以在所有平台(Windows等)上获得正确的路径并发布1.5个JVM。

    +0

    试过你的命令,我得到以下 /用户/约翰/工作/发展/自动化/产品/商店/目标 – jrock2004 2013-05-06 21:37:14

    +0

    在OS X.尝试Windows以确保... – 2013-05-06 21:52:35

    +0

    基督徒,可以说它的工作原理,不会真的解决了我的问题。当我明天上班时,我会尝试在Windows机器上 – jrock2004 2013-05-06 22:06:42

    相关问题