批处理文件工具(java+shell命令实现)

批处理文件工具(java+shell命令实现)

有一堆语料需要处理一下才能使用,本来应该可以直接用shell脚本直接处理的。

但是对shell脚本不熟,只会简单的一些命令。

因此就利用java+shell命令实现。

也许,直接用shell脚本处理是最好的。或许你有什么绝妙的方法也请告诉我哦!

当然,我这个工具有个好处,就是如果通过shell命令实现不了的功能,可以用java实现,

添加相应接口就可以了。

工具里面的功能,Java负责调度,shell负责具体功能。

意思是说,我写的shell命令是针对单个文件操作的,java通过循环来调用那些shell命令,以此实现批处理。

目前根据需要写了一些功能,比如字符串替换,文本头部或末尾添加内容,文本转码。

代码设计上,我留了一个叫Operation的接口,很容易添加新的文本操作功能。

以下是源代码:

package com.linger.fileoperation;

public interface Operation
{
	public void Run(String file,String[] options);
}
package com.linger.fileoperation;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class Cmd {

	/**
	 * java调用shell命令的封装
	 * 返回命令执行后的输出	//refer http://www.linuxidc.com/Linux/2012-04/58416.htm
	 */
	public static String Run(String[] cmd, int tp) {
		StringBuffer buf = new StringBuffer(1000);
		String rt = "-1";
		try {
			Process pos = Runtime.getRuntime().exec(cmd);
			pos.waitFor();
			if (tp == 1) {
				if (pos.exitValue() == 0) {
					rt = "执行完毕!";
				}
			} else {
				InputStreamReader ir = new InputStreamReader(
						pos.getInputStream());
				LineNumberReader input = new LineNumberReader(ir);
				String ln = "";
				while ((ln = input.readLine()) != null) {
					buf.append(ln + "\n");
				}
				rt = buf.toString();
				input.close();
				ir.close();
			}
		} catch (java.io.IOException e) {
			rt = e.toString();
		} catch (Exception e) {
			rt = e.toString();
		}
		return rt;
	}

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		//String[] commands = new String[] { "/bin/bash", "-c", "grep -r test *" };
		String[] commands = new String[] { "/bin/bash", "-c", "cd src;cd com;cd linger;cd fileoperation;ls" };
		//refer http://tuhaitao.iteye.com/blog/1047820
		String re= Cmd.Run(commands,-1);
		System.out.println(re);
	}

}

package com.linger.fileoperation;

public class AddToDocHead implements Operation
{
	//添加内容到文件头部
	//sed -i '1i<root>' t.txt
	//refer: http://zhidao.baidu.com/question/262964580.html
	@Override
	public void Run(String file, String[] options) {
		// TODO Auto-generated method stub
		String content = options[0];
		String[] commands = new String[] { "/bin/bash", "-c", "sed -i '1i"+content+"' "+file};
		String re= Cmd.Run(commands,1);
		System.out.println(re);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AddToDocHead rp = new AddToDocHead();
		String file = "/media/linger/G/sources/t.txt";
		String[] options = new String[]{"fuck"};
		rp.Run(file, options);

	}

}
package com.linger.fileoperation;

public class AddToDocTail implements Operation{

	//添加内容到文本末尾
	@Override
	public void Run(String file, String[] options) {
		// TODO Auto-generated method stub
		String content = options[0];
		String[] commands = new String[] { "/bin/bash", "-c", "echo "+content+">>"+file};
		String re= Cmd.Run(commands,1);
		System.out.println(re);
	}

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		AddToDocTail rp = new AddToDocTail();
		String file = "/media/linger/G/sources/t.txt";
		String[] options = new String[]{"'</root>'"};
		rp.Run(file, options);
	}

}

package com.linger.fileoperation;

//进入某个dir,把ls结果存到一个文件中
public class LsDir implements Operation{
	@Override
	public void Run(String dir, String[] options) {
		// TODO Auto-generated method stub
		String fileName = options[0];
		String[] commands = new String[] { "/bin/bash", "-c", "cd "+dir+";ls>../"+fileName};
		String re= Cmd.Run(commands,1);
		System.out.println(re);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		LsDir ls = new LsDir();
		String[] options = new String[]{"sougou_news2008.ls"};
		String dir="/media/linger/G/sources/sougou_news2008";
		ls.Run(dir, options);
	}

}

package com.linger.fileoperation;

public class Replace implements Operation
{
	//字符串替换:将某个文件的所有 src换成dst
	@Override
	public void Run(String file,String[] options)
	{
		// TODO Auto-generated method stub
		String src = options[0];
		String dst = options[1];
		String[] commands = new String[] { "/bin/bash", "-c", "sed -i 's/"+src+"/"+dst+"/g' "+file};
		String re= Cmd.Run(commands,1);
		System.out.println(re);

	}

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Replace rp = new Replace();
		String file = "/media/linger/G/sources/t.txt";
		String[] options = new String[]{"&","&"};
		rp.Run(file, options);
	}

}

package com.linger.fileoperation;

//转码:从gbk转为utf8
public class TransCoding implements Operation{
	@Override  //cat news.sohunews.010806.txt |iconv -f gbk -t utf8 -c>test.txt
	public void Run(String file, String[] options) {
		// TODO Auto-generated method stub
		String dst = options[0];
		String[] commands = new String[] { "/bin/bash", "-c", "cat "+file+" |iconv -f gbk -t utf8 -c>"+dst};
		String re= Cmd.Run(commands,1);
		System.out.println(re);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TransCoding test = new TransCoding();
		String file = "/media/linger/G/sources/news.sohunews.010806.txt";
		String[] options = new String[]{"/media/linger/G/sources/t.txt"};
		test.Run(file, options);
	}

}

package com.linger.fileoperation;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;

public class BatchOperation {

	///media/linger/G/sources/news.sohunews.010806.txt
	public static String path2Dir(String path)
	{
		int end = path.lastIndexOf('/');
		return path.substring(0, end);
	}

	public static String path2FileName(String path)
	{
		int start = path.lastIndexOf('/')+1;
		int end = path.length();
		return path.substring(start, end);
	}

	public static ArrayList<String> getFileList(String listFile) throws IOException
	{
		ArrayList<String> fileList = new ArrayList<String>();
		File file = new File(listFile);
		RandomAccessFile raf= new RandomAccessFile(file,"r");
		String line;
		while(true)
		{
			line = raf.readLine();
			if(line == null) break;
			fileList.add(line);
		}
		return fileList;
	}

	public static void batchTransCoding() throws IOException
	{
		Operation oper = new TransCoding();
		String fileName;
		String Dir = "/media/linger/G/sources/sougou_news2008";

		String[] options=new String[1];
		String newDir = "/media/linger/G/sources/sougou_news2008_utf8";
		ArrayList<String> fileList = getFileList("/media/linger/G/sources/sougou_news2008.ls");

		for(int i=0;i<fileList.size();i++)
		{
			fileName = fileList.get(i);
			System.out.println(fileName);
			options[0] = newDir +"/" +fileName;
			oper.Run(Dir+"/"+fileName, options);
		}
	}
	public static void batchReplace() throws IOException
	{
		Operation oper = new Replace();
		String fileName;
		String Dir = "/media/linger/G/sources/sougou_news2008_utf8";
		String[] options = new String[]{"&","&"};
		ArrayList<String> fileList = getFileList("/media/linger/G/sources/sougou_news2008.ls");

		for(int i=0;i<fileList.size();i++)
		{
			fileName = fileList.get(i);
			System.out.println(fileName);
			oper.Run(Dir+"/"+fileName, options);

		}
	}

	public static void batchAdd() throws IOException
	{
		Operation oper1 = new AddToDocHead();
		Operation oper2 = new AddToDocTail();
		String fileName;
		String Dir = "/media/linger/G/sources/sougou_news2008_utf8";
		String[] options1 = new String[]{"<root>"};
		String[] options2 = new String[]{"'</root>'"};//单引号可以避免转义
		ArrayList<String> fileList = getFileList("/media/linger/G/sources/sougou_news2008.ls");

		for(int i=0;i<fileList.size();i++)
		{
			fileName = fileList.get(i);
			System.out.println(fileName);

			//oper1.Run(Dir+"/"+fileName, options1);
			oper2.Run(Dir+"/"+fileName, options2);

		}
	}

	public static void main(String[] args) throws IOException
	{
		// TODO Auto-generated method stub
		batchAdd();

	}

}

本文作者:linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/38515663

批处理文件工具(java+shell命令实现),布布扣,bubuko.com

时间: 2025-01-14 00:44:14

批处理文件工具(java+shell命令实现)的相关文章

使用jq工具在Shell命令行处理JSON数据

因为最近要处理一些 JSON 数据格式,一大早经过一番搜索后,最终找到了 jq 这个很棒的工具.jq 允许你直接在命令行下对 JSON 进行操作,包括分片.过滤.转换等等. 首先在mac下安装jq,使用brew install jq就可以了,前提是安装了homebrew,如果在linux ubuntu下,应该可以使用sudo apt-get install jq安装. 让我们通过几个例子来说明 jq 的功能: 一.输出格式化,漂亮的打印效果 如果我们用文本编辑器打开 JSON,有时候可能看起来会

批处理文件的工具(java+shell为了实现)

批处理文件的工具(java+shell为了实现) 有一堆语料须要处理一下才干使用,本来应该能够直接用shell脚本直接处理的. 可是对shell脚本不熟,仅仅会简单的一些命令. 因此就利用java+shell命令实现. 也许,直接用shell脚本处理是最好的. 也许你有什么绝妙的方法也请告诉我哦! 当然.我这个工具有个优点,就是假设通过shell命令实现不了的功能,能够用java实现, 加入对应接口就能够了. 工具里面的功能.Java负责调度,shell负责详细功能. 意思是说,我写的shell

Android Java代码执行adb Shell命令

通过java代码代替adb命令 增加工具类 ShellUtils.java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; /** * ShellUtils */ public class ShellUtils { public static fin

Java 实现 ssh命令 登录主机执行shell命令

Java 实现 ssh命令 登录主机执行shell命令 1.SSH命令 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题.SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台.SSH在正确使用时可弥补网络中的漏洞.SSH客户端适用于多种平台.几乎

shell命令、调度工具、后台执行线程和软连接

一.shell命令 1.后缀.sh 第一行需要加#!/bin/bash 没有的话,需呀sh 命令执行 示例test.sh: #!/bin/bash date ./test.sh 提示没有权限,此时,需要chmod 744 test.sh 二.调度工具 1.airflow 2.azkaban 3.rundeck 4.Linux自带的调度工具:crontab *代表每的意思 使用crontab --help可以看到,-e表示编辑,-l表示产看内容 示例:crontab -e * * * * * /r

01. Shell基础和使用技巧(工具+常用bash命令加速操作)

Shell脚本介绍和常用工具 Shell脚本 Shell脚本:实际就是windows里的批处理脚本,多条可一次执行的Shell命令集合.Linux上的脚本可以用很多种语言实现,bash shell是比较简单的一种,更高阶的可以用其他脚本语言,比如Python. Shell脚本对系统的管理能力非常强大,甚至可以使用Shell结合php实现Web管理Linux系统功能:可以自己写一个Web页面(示例:基于Php),对系统进行管理,包括查看删除用户,配置网络,发送邮件,重启系统,一键备份,一键搭建服务

java程序执行,调用shell命令和shell脚本

  坑呀!记得在start()之后, waitFor()之前把缓冲区读出来打log,否则是阻塞缓冲区,没有输出的 package com.jikexueyuancrm.util; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import

Java调用Shell命令和脚本,致力于hadoop/spark集群

前言 说明的是,本博文,是在以下的博文基础上,立足于它们,致力于我的大数据领域! http://kongcodecenter.iteye.com/blog/1231177 http://blog.csdn.net/u010376788/article/details/51337312 http://blog.csdn.net/arkblue/article/details/7897396 第一种:普通做法 首先,编号写WordCount.scala程序. 然后,打成jar包,命名为WC.jar.

java执行shell命令,chmod 777 xxx,改变权限无效的解决办法。

在java程序中执行shell命令,改变文件的权限,可以在命令行中执行 chmod 777 <span style="font-family: Arial, Helvetica, sans-serif;">/data/misc/123.sh"</span> 来改变权限,但是在java代码中执行这个命令时使用 Runtime.getRuntime().exec("chmod 777 /data/misc/123.sh"): 无效,使用