Java 执行Linux 命令时不支持正则表达式

9 篇文章 1 订阅

需求背景:

将数据库里的数据与关联的文件路径一一对应!如:

将Table file_config 中的 File_path :/opt/downloads/20121105/001.pdf    修改为 :/opt/downloads/20121107/001.pdf   

这样就需要做两步处理,一是更新数据库,二是移动文件与数据库中的路径保持一致!这样看来是如此的简单,但是在实际的操作运行过程就发现了一个问题,Java中执行Linux的命令(如mv)时,并不支持通配符(如?*),就这样一来就不得不将每一个文件执行一条mv命令了。

 

Linux 中执行 mv命令可以支持通配符(正则表达式),如: mv /opt/temp/srcpath/*.pdf  /opt/temp/destpath/

是完全可以的。但是同样的操作交给Java的Runtime来执行就完成不了。

 

package com.mss.task;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class TestComman {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String srcpath = "/opt/temp/srcpath/";
		String destpath = "/opt/temp/destpath/";
		
		
		String command = "mv "+ srcpath + args[0] +"  "+destpath;
		try {
			System.out.println("执行的命令为:"+command);
			Runtime runtime = Runtime.getRuntime();
			Process process = runtime.exec(command);
			InputStream is = process.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(is));
			String line = "";
			while((line = reader.readLine())!=null){
				System.out.println(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

或许Java 的Runtime 有更高级的用法也不得而知,就目前而言我并未发现有更好的处理方式,只能一个文件对应一个mv 命令了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值