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


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

可是对shell脚本不熟,仅仅会简单的一些命令。
因此就利用java+shell命令实现。

也许,直接用shell脚本处理是最好的。

也许你有什么绝妙的方法也请告诉我哦!

当然。我这个工具有个优点,就是假设通过shell命令实现不了的功能,能够用java实现,
加入对应接口就能够了。

工具里面的功能。Java负责调度,shell负责详细功能。
意思是说,我写的shell命令是针对单个文件操作的。java通过循环来调用那些shell命令,以此实现批处理。
眼下依据须要写了一些功能,比方字符串替换,文本头部或末尾加入内容。文本转码。

代码设计上。我留了一个叫Operation的接口,非常easy加入新的文本操作功能。




下面是源码:

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为了实现)的更多相关文章

  1. Java 9 揭秘(11. Java Shell)

    Tips 做一个终身学习的人. 在本章节中,主要介绍以下内容: 什么是Java shell JShell工具和JShell API是什么 如何配置JShell工具 如何使用JShell工具对Java代 ...

  2. 八、jdk工具之JvisualVM、JvisualVM之二--Java程序性能分析工具Java VisualVM

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  3. 简单的自动化运维工具(shell+except+whiptail+功能模块化函数+循环)

    简单的自动化运维工具(shell+except+whiptail+功能模块化函数+循环) http://www.cnblogs.com/M18-BlankBox/p/5881700.html

  4. 生产力工具:shell 与 Bash 脚本

    生产力工具:shell 与 Bash 脚本 作者:吴甜甜 个人博客网站: wutiantian.github.io 注意:本文只是我个人总结的学习笔记,不适合0基础人士观看. 参考内容: 王顶老师 l ...

  5. [日期工具分享][Shell]为特定命令依次传入顺序日期执行

    [日期工具分享][Shell]为特定命令依次传入顺序日期执行 使用方式: <本脚本文件名(必要时需要全路径)> <要执行的命令所在的文件名> <开始日期> < ...

  6. IDEA工具java.io.IOException: Could not find resource SqlMapConfig.xml

    IDEA工具java.io.IOException: Could not find resource SqlMapConfig.xml 解决办法: 1.删掉pom.xml文件的这行代码 <pac ...

  7. 001 发大招了 神奇的效率工具--Java代码转python代码

    今天发现一个好玩的工具: 可以直接将java转成python 1. 安装工具(windows 环境下面) 先下载antlr: 下载链接如下: http://www.antlr3.org/downloa ...

  8. Intellij IDEA工具Java web 环境搭建

    Java web 环境搭建 环境依赖 操作系统:Windows 7 64位 开发工具:IntelliJ IDEA 13.1.4 开发工具依赖环境 JDK版本:1.7+ 开发工具依赖插件 包管理:Mav ...

  9. [开发工具]Java开发常用的在线工具

    注明: 本文转自http://www.hollischuang.com/archives/1459.作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工 ...

随机推荐

  1. IIS7配置PHP图解

    IIS6整合PHP详解:http://zhidao.zgsj.com/article/8/2011118142648.shtml PHP5.2.17 官方下载: http://windows.php. ...

  2. Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. ...

  3. hdu Minimum Transport Cost(按字典序输出路径)

    http://acm.hdu.edu.cn/showproblem.php? pid=1385 求最短路.要求输出字典序最小的路径. spfa:拿一个pre[]记录前驱,不同的是在松弛的时候.要考虑和 ...

  4. 【2037】利用字符串处理,输出x+y的结果

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 输入两个整数x,y输出它们的和.(0<=x,y<=10的100次幂) [输入] 共2行:   ...

  5. [CSS] Draw Simple Icons with CSS

    Using pseudo-elements like ::before and ::after we can draw some simple icons without having using i ...

  6. SpringMVC+Spring+Mybatis+Mysql项目搭建

    眼下俺在搭建一个自己的个人站点玩玩.一边练习.一边把用到的技术总结一下,日后好复习. 站点框架大致例如以下图所看到的: 眼下仅仅用到了SpringMVC+Spring+Mybatis+Mysql.把它 ...

  7. js课程 2-6 js如何进行类型转换及js运算符有哪些

    js课程 2-6 js如何进行类型转换及js运算符有哪些 一.总结 一句话总结: 1.所有类型->布尔类型(为假的情况)有哪些(6种)? 1)字符串('')2)整型(0)3)浮点型(0.0)4) ...

  8. Android JobService的使用及源码分析

    Google在Android 5.0中引入JobScheduler来执行一些需要满足特定条件但不紧急的后台任务,APP利用JobScheduler来执行这些特殊的后台任务时来减少电量的消耗.本文首先介 ...

  9. VC++ 訪问数据库实例具体解释图解

    一 ADO 方式訪问 Access 新建一个对话框project,加入控件,如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2 ...

  10. Java8学习之旅2---基于Lambda的JDBC编程

    Java8的Lambda表达式确实是一个很好的特性.可是在哪些场合下使用.事实上还是须要细致考虑的.我们当然不能为了使用而使用,而是须要找到切实实用的场合.在JDBC编程中,比如查询语句,首先须要进行 ...