java 运行 xx.bat或xx.sh批处理文件

一、项目要求

        客户需要一个可以将数据进行备份的功能,每次想要备份时,点一下就可以进行备份。

二、项目环境

        项目的部署环境是Linux

        注:windows也是一样,改一下文件的后缀和批处理文件的内容即可。

看过好些个博文,没有一个是符合我的要求的。于是我就动手写了一个

侵权即删!!

参考一:java 运行批处理文件_如何从Java应用程序运行批处理文件?_赵余的博客-CSDN博客在我的Java应用程序中,我想运行一个调用"scons -Q implicit-deps-changed build\file_load_type export\file_load_type"的批处理文件似乎我甚至无法执行我的批处理文件。 我没有想法。这就是我在Java中所拥有的:Runtime.getRuntime().exec("build.bat", null, new File("."))...https://blog.csdn.net/weixin_29596485/article/details/114609016

参考二:Java调用Shell命令和脚本 - 百度文库https://wenku.baidu.com/view/6efdf5002c60ddccda38376baf1ffc4ffe47e281.html

参考三:java调用shell脚本的方法-java基础-Python学习网java调用shell脚本的方法:1、通过ProcessBuilder进行调度,这种方法比较直观,而且参数的设置也比较方便。2、直接通过系统Runtime执行shell,特别是参数方面,必须自己加空格分开。icon-default.png?t=M666https://m.py.cn/java/jichu/30321.html

以上内容只作为参考,如有侵权请联系,本人立即删除。

三、解决方案

 1.创建一个批处理文件,xxx.sh。写入下方脚本

rem ******MySQL backup start******

@echo off

::设置时间变量
if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%%hour%%time:~3,2%"

::进入mysql安装目录的bin目录下
:: cd "C:\Program Files\MySQL\MySQL Server 5.7\bin\"
::cd F:\backup\

::执行备份操作
::mysqldump --opt --single-transaction=TRUE --user=root --password=root --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "db_pj_oa" > F:\backup\backup_%Ymd%.sql
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump" -uroot -proot  db_pj_oa > F:\backup\db_pj_oa_%Ymd%.sql
@echo on

rem ******MySQL backup end******

2.创建一个批处理类,拷贝下方方法

public String callScript(String script, String args, String...  workspace) {
		String line = "";
		if(workspace[0] != null) {
			System.out.println(workspace[0]);
			try {
				ProcessBuilder processBuilder = new ProcessBuilder();
				Process process = processBuilder.command(workspace[0] + "/" + script).start();
				BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
				while ((line = input.readLine()) != null) {
					line = "true";
				}
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return line;
	}

script:是批处理文件的名称,如,bkdp_pj_oa.sh(我的)

args:这里我默认为“4”,想要知道为什么是“4”的朋友可以自行查阅资料

workspace:批处理文件的文件夹名称,如,/home/backup/(我的)

3.调用批处理文件

// 调用数据库备份批处理文件
DataBackups dbup = new DataBackups();
dbup.callScript("bkdp_pj_oa.sh", "4", "/home/backup/");

DataBackups:是我的批处理文件的类

如此,大功就告成了!

欢迎评论进行探讨!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是您的第一个问题。 以下是使用Java设计类Person的代码: ``` import java.io.*; public class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public static void main(String[] args) { // 创建Person对象并保存到文件a.bat中 Person p1 = new Person("张三", 20); try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.bat")); oos.writeObject(p1); oos.close(); } catch (IOException e) { e.printStackTrace(); } // 从文件a.bat中读取Person对象并打印 try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.bat")); Person p2 = (Person) ois.readObject(); System.out.println("姓名:" + p2.getName() + ",年龄:" + p2.getAge()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } ``` 稍微解释一下这里的代码逻辑: - 我们使用Java的Serializable接口来将Person类序列化,使其可以被保存到文件中。 - 在main方法中,我们创建了一个Person对象p1,并将其保存到a.bat文件中。这里我们使用了ObjectOutputStream类的writeObject方法将对象写入文件。 - 接着,我们又从a.bat文件中读取对象p2,并使用ObjectInputStream类将其反序列化,获取姓名和年龄信息,并打印出来。 这样就完成了您的需求,同时也符合Java中常见的序列化和反序列化的做法。希望以上回答对您有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值