您的位置:首页 > 运维架构 > Shell

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

2014-08-12 19:39 441 查看
批处理文件工具(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息