带有日志文件但无法使用 java 程序日志文件执行的 Bat 文件未生成
Posted
技术标签:
【中文标题】带有日志文件但无法使用 java 程序日志文件执行的 Bat 文件未生成【英文标题】:Bat file with log file but not able to execute with java program log file is not generation 【发布时间】:2021-12-09 23:38:18 【问题描述】:我创建了一个 bat 文件,我试图复制文件夹并将其日志生成到 myLog.txt 文件中 现在我正在尝试通过正在执行的 java 程序运行 bat 文件,但它无法生成日志文件,请帮助我
public static void allBatch()
try
// Process p = Runtime.getRuntime().exec("cmd /c stopTomact.bat", null, new File("C:\\Users\\Ajay\\Documents"));
Process process =Runtime.getRuntime().exec("cmd /C start C:\\Users\\Ajay\\Documents\\batchFile.bat");
System.out.println("Stopped");
catch (IOException ex)
ex.printStackTrace();
@echo off
@echo off
call :main >myLog.txt 2>&1
:main
if exist "C:\Users\Ajay\Documents\old Tomcat\Controller\*.*" (
xcopy /e "C:\Users\Ajay\Documents\old Tomcat\Controller\*.*" "C:\Users\Ajay\Documents\newTomcat\Controller\*" /y
echo %date%-----Copy Successful------%time%
echo ---------------------------------------------------
net stop Tomcat8
sc query Tomcat8
echo %date%-----Stop Successful------%time%
rem start notepad "C:\Users\Ajay\Documents\"
)else echo %date%------- sorry Failed TO Copy -----%time%
timeout 5 > nul
exit
【问题讨论】:
【参考方案1】:您调用 Runtime.exec() 方法。该方法返回一个 Process 实例,您可以在它的文档中阅读
默认情况下,创建的进程没有自己的终端或控制台。它的所有标准 I/O(即 stdin、stdout、stderr)操作都将被重定向到父进程,在那里可以通过使用 getOutputStream()、getInputStream() 和 getErrorStream() 方法获得的流来访问它们。父进程使用这些流向进程提供输入并从进程中获取输出。由于部分原生平台只为标准输入输出流提供有限的缓冲区大小,未能及时写入进程的输入流或读取输出流可能会导致进程阻塞,甚至死锁。 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Process.html
因此,您的进程很可能是由操作系统启动的,但由于 I/O 限制而被阻止。通过阅读 STDOUT 和 STDERR 流直到您的流程完成来解决这个问题。 https://www.baeldung.com/run-shell-command-in-java
可以看到一个很好的编程模型【讨论】:
以上是关于带有日志文件但无法使用 java 程序日志文件执行的 Bat 文件未生成的主要内容,如果未能解决你的问题,请参考以下文章
关于在eclipse上能运行Map但无法运行Reduce的解决方法