Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改通过Java.Lang.Reflect调用的方法的CWD_Java_Tomcat_Reflection - Fatal编程技术网

更改通过Java.Lang.Reflect调用的方法的CWD

更改通过Java.Lang.Reflect调用的方法的CWD,java,tomcat,reflection,Java,Tomcat,Reflection,我有一个Javaservlet,它使用反射来调用其他Java方法。我调用的一些Java方法会生成文件,我希望能够将这些文件移动到其他位置 当前,如果方法中未提供绝对路径(例如PrintWriter outFile=new PrintWriter(“prog.out”)),则输出文件将被抛出到Tomcat安装的bin目录中 我尝试使用以下代码设置CWD,其中myDataDir是我希望输出文件进入的目录: File directory; directory = new File(myDataDir.

我有一个Javaservlet,它使用反射来调用其他Java方法。我调用的一些Java方法会生成文件,我希望能够将这些文件移动到其他位置

当前,如果方法中未提供绝对路径(例如PrintWriter outFile=new PrintWriter(“prog.out”)),则输出文件将被抛出到Tomcat安装的bin目录中

我尝试使用以下代码设置CWD,其中myDataDir是我希望输出文件进入的目录:

File directory;
directory = new File(myDataDir.getPath()).getAbsoluteFile();
if (directory.exists() || directory.mkdirs()) {
    System.setProperty("user.dir", directory.getAbsolutePath());
}
我甚至深入研究了我编写的Java方法的代码,并从中打印出“user.dir”是什么。即使在那里,它也告诉我一切都设置正确(例如,“user.dir”==/path/that/i/want)。然而,当我使用反射调用该方法时,输出文件会被放入bin目录中

以前有人经历过类似的事情吗?如有任何指示或指导,将不胜感激

一些细节:

  • 在Redhat 7.3上运行
  • 使用Tomcat 8.0.36版
  • 带Maven 3.3.9的建筑
  • Java1.7.0

谢谢

您不能在运行时更改“当前工作目录”。但是你根本不需要使用它。您需要检测所提供的路径是否为非绝对路径(您是否应该接受绝对路径?这似乎是一个安全问题),然后通过在其前面加上您认为合适的根目录将其设置为绝对路径。如何检查Java方法中所提供的路径是否为绝对路径?从我的servlet的角度来看,它不知道它正在运行的方法或该方法正在创建的任何文件。如果您想运行黑盒代码并需要为它们提供一个工作目录,那么您需要使用一个新的进程(具有自己的JVM)。在这一点上,最好重新考虑您的设计,并为这些“插件”可以做什么以及如何配置它们制定一些标准机制。这难道不是java.lang.reflect.Method.invoke的基本功能吗?衍生出一个新的Java进程?不,这只是一个方法调用。