首页 > 代码库 > 批处理文件工具(java+shell命令实现)
批处理文件工具(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 = http://www.mamicode.com/options[0];>
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。