批处理文件工具(java+shell命令实现)
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(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。