JAVA生成Shell文件并执行

JAVA生成Shell文件并执行

       最近有个奇怪的需求,创建RabbitMq用户,但是不能通过Rabbitmq的管理页面进行添加用户。Rabbitmq的管理页面对外的接口也没有发现添加用户的功能。只能出此下策。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;

public class ShellUtil {
        //创建shell
	public static void createShell(String path, String... strs) throws Exception {

		if (strs == null) {
			System.out.println("strs is null");
			return;
		}

		File sh = new File(path);
		if (sh.exists()) {
			sh.delete();
		}

		sh.createNewFile();
		sh.setExecutable(true);
		FileWriter fw = new FileWriter(sh);
		BufferedWriter bf = new BufferedWriter(fw);

		for (int i = 0; i < strs.length; i++) {
			bf.write(strs[i]);

			if (i < strs.length - 1) {
				bf.newLine();
			}
		}
		bf.flush();
		bf.close();
	}

        //执行shell
	public static String runShell(String shpath) throws Exception {

		if (shpath == null || shpath.equals("")) {
			return "shpath is empty";
		}
		Process ps = Runtime.getRuntime().exec(shpath);
		ps.waitFor();

		BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
		StringBuffer sb = new StringBuffer();
		String line;
		while ((line = br.readLine()) != null) {
			sb.append(line).append("\n");
		}
		String result = sb.toString();
		return result;
	}

        //测试效果
	public static void main(String[] args) {
                //文件存放路径
		String path = "/home/xxx/java.sh";
                //执行的脚本,一个字符串就是一行。
		String[] strs = { "cp aaa.sh aaa2.sh" };
		try {
			ShellUtil.createShell(path, strs);
			String result = ShellUtil.runShell(path);
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

自测可用。

由于自己经常利用浏览器插件下载网页图片,由此产生很多的文件夹和文件,这些文件夹的名字多半是网页的title,导致文件夹名很长,文件名多是些很长的数。感觉这样的状况不是很好就自己用java实现了简单的shell来管理这些自动下载的批量文件产生的文件夹和文件! 使用注意事项: 该程序默认的工作路径是c:\盘,建议在windows环境下利用这则小程序,linux下未测试。 这个简单的java shell拥有以下几个命令: cd 进入要工作的目录 ls 列出该工作目录下的文件文件夹 re 对工作目录下的文件夹名或文件名进行改名操作 man 对具体的命令的详细帮助文档 pwd 显示当前工作的目录 history 显示已经输入的历史命令 help 调取帮助文档命令 exit 退出当前的程序 其中re修改文件以及文件夹名的命令是这个程序的价值体现。 re/cd/ls/man这四个命令拥有命令选项,在使用命令选项的规则统一是:xx-uuff其中xx代表命令,-代表分隔符是必须的,uu代表命令选项,ff代表具体需求的字符。 pwd/history/help/exit是单个输入的命令,没有命令选项。 利用这样的命令:man-cd就可以查看cd命令使用的具体介绍,其中-是必须的,其它带有命令选项的都可以通过这种方式查看命令帮助文档。 例如输入:man-re就会列出以下信息 对当前工作目录下的文件夹名和文件名进行改动的命令: re -j@#将目录下所有的文件夹名字中@#间(包括@#)内容去掉 re -q@将目录下所有文件夹名中@后(包括@)的内容去掉 re -h@将目录下所有文件夹名中@前(包括@)的内容去掉 re -k@将目录下所有文件名中的@去掉,当@为.时表示去掉名字中的空格(特注) re -m@#$将目录下所有文件名中的@#$去掉,这是去掉名字中多个字符的命令 re -r@#将目录下所有文件名中的@用#替换掉 re -s@#$%将目录下所有文件名中的@用#替换,$用%替换,这是替换名字中多个字符的命令 re -f+前面七个命令的命令选项的话就是对该工作目录下的所有文件文件名起相应作用(小心使用)! re -fh.ppp.xxx将目录下所有符合条件的文件文件名的后缀ppp改成xxx!(较复杂,还未实现) re -fa将当前工作目录下的所有文件名按数字递增方式命!
生成Excel文件.XLS需要使用特定的工具或库,如Microsoft Excel或Apache POI等。以下是使用Apache POI库在shell脚本生成XLS文件的示例: 1. 安装Java和Apache POI库: ``` sudo apt-get install default-jre sudo apt-get install libcommons-collections4-java sudo apt-get install libcommons-compress-java sudo apt-get install libcommons-math3-java sudo apt-get install libjaxb-api-java sudo apt-get install libxmlbeans-java ``` 2. 创建一个名为generate_xls.sh的shell脚本,并添加以下内容: ``` #!/bin/bash # 导入Apache POI库 export CLASSPATH=.:/usr/share/java/poi/*:/usr/share/java/poi-ooxml/* # 编译Java程序 javac GenerateXLS.java # 运行Java程序 java GenerateXLS ``` 3. 在同一目录下创建一个名为GenerateXLS.javaJava程序,并添加以下内容: ``` import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; public class GenerateXLS { public static void main(String[] args) { // 创建工作簿 Workbook workbook = new HSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建行 Row row = sheet.createRow(0); // 创建单元格 Cell cell = row.createCell(0); cell.setCellValue("Hello World!"); // 写入文件 try { FileOutputStream outputStream = new FileOutputStream("output.xls"); workbook.write(outputStream); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 4. 运行shell脚本: ``` ./generate_xls.sh ``` 5. 在同一目录下将生成一个名为output.xls的Excel文件,其中包含一个单元格,内容为“Hello World!”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值