cmd中的java命令如何设置默认目录

时间:2017-11-30 22:10:34

标签: java

我正在从cmd运行java程序,如java Main。但在此之前,我必须使用cd ...到达路径目录,因为我的Main类正在重写属性文件中的值,该文件位于根目录中。是否有设置根目录的方法或选项,那么我将不需要使用cd命令到达此目录?

3 个答案:

答案 0 :(得分:0)

您可以将路径作为参数传递到目录,然后从String[] args方法中main进入。您将绝对路径传递给文件,并且与您启动Java进程的目录无关。

以下oracle's tutorial展示了如何做到这一点。

答案 1 :(得分:0)

使用while循环和一些简单的字符串处理,通过命令提示符导航到目录非常简单:

    System.out.println("Please navigate to the desired directory then type 'done'...");

    @SuppressWarnings("resource")
    Scanner scanner = new Scanner(System.in);

    StringBuilder path = new StringBuilder(); //Storage for dir path
    path.append(System.getenv("SystemDrive"));
    while(scanner.hasNextLine()) {

        String command = scanner.nextLine(); //Get input    
        if(command.equalsIgnoreCase("done")) {
            break;
        }else if(command.startsWith("cd")){
            String arg = command.replaceFirst("cd ", ""); //Get next dir
            if(!arg.startsWith(System.getenv("SystemDrive"))) { //Make sure they are not using a direct path
                if(!new File(path.toString() + "/" + arg).exists()) { //Make sure the dir exists
                    arg = arg.equalsIgnoreCase("cd") ? "" : arg;
                    System.out.println("Directory '" + arg + "' cannot be found in path " + path.toString());
                }else {
                    if(arg.equals("..."))
                        path = new StringBuilder(path.substring(0, path.lastIndexOf("/"))); //StringBuilder#substring does not alter the actual builder
                    else
                        path.append("/" + arg);
                    System.out.println("\t" + path.toString()); //Add the dir to the path
                }
            }else { //If they are using a direct path, delete the currently stored path
                path = new StringBuilder();
                path.append(arg);
                System.out.println("\t" + path.toString());
            }
        }else if(command.equalsIgnoreCase("dir")) {
            System.out.println(Arrays.toString(new File(path.toString() + "/").list()));
            //List the dirs in the current path
        }else {
            System.out.println("\t" + command + " is not recognized as an internal command.");
        }
    }

    //Get your file and do whatever
    File theFile = new File(path.toString() + "/myFile.properties");

答案 2 :(得分:0)

您可以使用Java的-cp(classpath)命令行参数。

然后,如果您的目录结构是

<application folder>
|
|--config.props  (properties file)
|
\--bin
   |
   |--Main.class
   |
   |... other classes

您可以转到<application folder>并使用java -cp bin Main启动该应用程序。它可以将config.props称为当前文件夹中的文件(因为它位于当前文件夹中)。

由于这是您可能不想一直输入的内容,因此它可以包含在Windows .bat文件或* nix .sh脚本中,位于config.props旁边。