使用不同的工作目录运行Runnable

时间:2012-05-03 12:20:52

标签: java

在我的程序中,我想用不同的工作目录执行一些函数(我已经加载了JAR,它使用当前目录中的文件并想要执行它)

有没有办法通过设置工作目录来执行Runnable或Thread或其他对象?

3 个答案:

答案 0 :(得分:1)

不,工作目录与操作系统级进程相关联,您无法在程序的一部分中更改它。您必须更改目录的获取方式。

(我假设您当前要么使用System.getProperty(“user.dir”)获取目录,要么调用类似从环境获取目录的代码。)

澄清:您当然可以全局更改属性,但随后它会在所有线程中更改。我认为这不是你想要的,因为你谈论线程。

答案 1 :(得分:1)

您无法为Thread设置工作目录,但是您可以使用不同的工作目录创建新进程。 点击这里查看示例: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

您还可以创建一个特定类型的线程,该线程具有要使用的目录的概念。 例如:

public class MyThread extends Thread
{
   private final String workingDir;

   public MyThread(String workingDir)
   {
        this.workingDir = workingDir;
   }

   public void run()
   {
       //use the workingDir variable to access the current working directory
   }
}

答案 2 :(得分:0)

如果您使用System.setProperty()

设置user.dir,则可能会有效

我认为您可以通过以下示例进行更改:

public static void main(String[] args) {

    System.out.println("main: " + new File(".").getAbsolutePath());
    System.setProperty("user.dir", "C:/");
    Runnable r = new Runnable() {
        public void run() {
            System.out.println("child: "+new File(".").getAbsolutePath());
        }
    };

    new Thread(r).start();

    System.out.println("main: "+new File(".").getAbsolutePath());

}

这将产生:

  

主要:C:\ Projekte \ Techtests。

     

主要:C:\。

     

孩子:C:\。