【发布时间】:2017-03-29 22:43:21
【问题描述】:
我正在尝试在我的 tomcat 网络服务器上运行一个脚本。之前在我的本地机器上运行脚本,这是我使用的代码。
String absolutePath = new File(".").getAbsolutePath();
int last = absolutePath.length()-1;
absolutePath = absolutePath.substring(0, last);
String filePath = "";
if(osVersion.equalsIgnoreCase("Ubuntu"))
{
try (FileReader fr = new FileReader("template.txt");
FileWriter fw = new FileWriter("Ubuntu/ubuntu_file.json");) {
int c = fr.read();
while(c!=-1) {
fw.write(c);
c = fr.read();
}
} catch(IOException e) {
e.printStackTrace();
}
filePath = "Ubuntu";
String fi = absolutePath + filePath;
System.out.println(fi);//Get the full path.
// Create ProcessBuilder.
ProcessBuilder pb = new ProcessBuilder("bash", "-c",
"cd "+fi+" ; PACKER_LOG=1 /usr/local/bin/packer build ubuntu_file.json");
Process p = pb.start();
但是,当我尝试在 tomcat 网络服务器上运行它时,我不断收到此错误。
EclipseEE.app/Contents/MacOS/Ubuntu 无法解析模板:打开 ubuntu_file.json: 没有这样的文件或目录
我对 Tomcat 还很陌生,我只是在学习它的来龙去脉。我应该将我的 Ubuntu 文件夹放在哪个 tomcat 目录(我假设它是 webapp 目录),以便 tomcat 获取文件夹的绝对路径,然后能够运行脚本。
【问题讨论】:
-
你永远不应该依赖于 Web 服务器的当前目录(例如 Tomcat)。始终在 Web 应用程序代码中使用完全限定的文件名。
-
如果这听起来很愚蠢,我很抱歉。我对这一切都很陌生。那我该怎么做呢?它最初不应该是一个网络应用程序。
-
如果你不想硬编码一个合格的文件名(不是一个好主意),这意味着你的 webapp 需要能够被配置,例如使用servlet initialization parameters。
标签: java tomcat servlets jakarta-ee path