带有日志文件但无法使用 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的解决方法

应用程序无法在UNIX中创建日志文件?

使用带有来自java.util.logging的FileHandler的logger时,不需要.0扩展日志文件

在 Java mySQL 中创建一个日志文件

无法从 hsqldb 日志文件恢复

在 Unity 日志引用的 JSON 配置文件中无法理解/发现错误