批处理文件的工具(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. eclipse编译器错误、警告设置

    颜色配置步骤:Window->Preferences->General->Editors->Text Editors->Annotations

  2. Java中compareTo()方法比较字符串详解

    中心:String 是字符串,它的比较用compareTo方法,它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型 1.当两个比较的字符串是英文且长度 ...

  3. JavaWeb网站技术架构

    JavaWeb网站技术架构总结   题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充 ...

  4. POJ 3627 Bookshelf 贪心 水~

    最近学业上堕落成渣了.得开始好好学习了. 还有呀,相家了,好久没回去啦~ 还有和那谁谁谁... 嗯,不能发表悲观言论.说好的. 如果这么点坎坷都过不去的话,那么这情感也太脆弱. ----------- ...

  5. VMware虚拟机12安装linux系统详细教程

    亲测有效,附图: 工具/原料 VM ware workstation12虚拟机(百度下载) 深度linux镜像ios系统文件 链接:https://pan.baidu.com/s/1RY1Plgru4 ...

  6. Drupal 7 模块开发 建立模块帮助信息(hook_help)

    建立模块请參考 <Drupal 7 模块开发 建立> 假设你要支持中文,文件格式必须保存为 UTF-8.NO BOM ------------------------------ hook ...

  7. css样式继承规则详解

    css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...

  8. MySQL建立双向主备复制server配置方法

    1.环境描写叙述 serverA(主) 192.85.1.175 serverB(从) 192.85.1.176 Mysql版本号:5.1.61 系统版本号:System OS:ubuntu 10.1 ...

  9. 关于ulimit -a中需要修改的两个值

    以root用户运行 ulimit -a 命令,其中有两个参数分别为: open files和max user processes   修改方法:  vi /etc/security/limits.co ...

  10. TensorFlow 辨异 —— tf.add(a, b) 与 a+b(tf.assign 与 =)、tf.nn.bias_add 与 tf.add

    1. tf.add(a, b) 与 a+b 在神经网络前向传播的过程中,经常可见如下两种形式的代码: tf.add(tf.matmul(x, w), b) tf.matmul(x, w) + b 简而 ...