从批处理文件运行java时如何获取java项目中文件的路径?

时间:2016-03-17 18:13:01

标签: java batch-file command-line

我在Windows上运行Java 8应用程序。我想在不使用绝对路径的情况下在我的Java项目中找到一个文件。从命令提示符运行我的应用程序时,以下代码有效:System.getProperty("user.dir")。但是,当我从批处理文件运行我的java应用程序时,此代码返回批处理文件的路径,该路径与java应用程序的路径不同。

如何获取位于Java项目文件夹中的文件abc.txt的路径?

3 个答案:

答案 0 :(得分:1)

System.getProperty(“user.dir”)为您提供了正确的目录,因为您的应用程序是在批处理文件中启动的。这是它的工作方式。

您始终可以使用ClassLoader将文件加载到应用程序中。

假设您已将abc.txt放入项目文件夹中。实际上,如果您在代码中的某处将其用作资源文件,则应将其放在项目的src / resources文件夹中。然后在您的代码中,执行以下操作:

   File file = new File(getClass().getResource("abc.txt").getFile());

无论您的应用程序在何处启动,都可以访问该文件。

查看this post on using ClassLoader将有助于您更好地了解如何在Java中加载资源。

<强>更新

Here is my project in Eclipse,abc.txt位于src文件夹下,该文件夹位于类路径中。

MyClass.java仅包含以下代码:

    public class MyClass {
        public static void main(String[] args) {
            System.out.println("s: " + MyClass.class.getClassLoader().getResource("abc.txt").getFile());
        }
    }

答案 1 :(得分:0)

我遇到了同样的问题,我在搜索A LOT后找到的唯一工作就是将启动批处理文件放在与java应用程序相同的路径中,然后生成批处理的快捷方式,这就是我可以放在任何地方的地方其他文件夹....

之后,java运行良好......

答案 2 :(得分:0)

假设您基本上想要在代码中使用相对路径,可以使用以下函数获取源目录,然后使用源代码路径中文件的相对位置获取任何文件。

public static String getMySourcePath() {
        URL location = <Your class>.class.getProtectionDomain().getCodeSource()
                .getLocation();
        String srcPath = location.toString().replace("file:/", "")
                .replace("bin", "src");
        return srcPath;
    }