`

java RunTime.getRuntime.exec()使用外部命令,特殊字符

    博客分类:
  • Java
阅读更多
这样一段java代码:
        // 最初的
	/*private static final String FILE_COMMAND_WIN = "file.exe %s";
	private static final String FILE_COMMAND_LINUX = "file %s";*/
        // 最终的
	private static final String FILE_COMMAND_WIN = "file.exe";
	private static final String FILE_COMMAND_LINUX = "file"

	public static String getFileCommandResult(String file) throws IOException {
		Process process = null;	
		InputStream in = null;
		InputStreamReader reader = null;
		BufferedReader bufferedReader = null;
		String result = null;
		try {
			String command;
			if (Util.isWindows())
				command = FILE_COMMAND_WIN;
			else
				command = FILE_COMMAND_LINUX;
                        
        //(0)最初的设计,不能解决file中特殊字符的问题,path和文件名字有空格或特殊字符,程序会在这里hang住
        //process = Runtime.getRuntime().exec(String.format(command, file));
                        
        //(1)这样程序不会hang住,但是shell命令提示找不到这个文件
			/*File oldFile = new File(file);
			String temp = oldFile.toURI().getRawPath();
			System.out.println(temp);*/
        //(2)这样程序程序也会hang住
			/*String temp = file.replace(" ", "\" \"");
			System.out.println(temp);
			process = Runtime.getRuntime().exec(String.format(command, temp));*/
		        
        //最终的。exec的重载输入可以是个字符数组
        //将命令和参数分开,避免exec自己以空格去划分。
			String[] commands = new String[2];
			commands[0] = command;
			commands[1] = file;
			//System.out.println(commands.toString());
			process = Runtime.getRuntime().exec(commands);
			in = process.getInputStream();
			reader = new InputStreamReader(in);
			bufferedReader = new BufferedReader(reader);
			result = bufferedReader.readLine();
		} finally {					
			if (bufferedReader != null)
				bufferedReader.close();
			
			if (process != null)
				process.destroy();
		}
		
		return result;
	}



reference:
http://hi.baidu.com/%D5%D4%B7%F6%B7%E7/blog/item/f10ef7ece09e37c42f2e21eb.html
http://www.iteye.com/problems/9241
http://hi.baidu.com/mikeymouse01/blog/item/7eae62f2fd6b6940342accc9.html
http://flyeagle.iteye.com/blog/406487
http://dingbuoyi.iteye.com/blog/836721
Java 文件路径中特殊符号问题
http://wisdombase.net/wiki/index.php?title=Java_%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E4%B8%AD%E7%89%B9%E6%AE%8A%E7%AC%A6%E5%8F%B7%E9%97%AE%E9%A2%98
分享到:
评论

相关推荐

    使用runtime实现linux命令行或shell脚本多次调用

    `Runtime.exec(String command)`方法用于执行单个命令,而如果需要执行包含多个命令的shell脚本,可以使用`Runtime.exec(String[] cmdArray)`,其中cmdArray是一个包含命令及其参数的字符串数组。 下面是一个简单的...

    java.lang.Runtime.exec() Payload知识点详解

    在 Java 语言中,可以使用 Runtime.getRuntime().exec() 方法执行命令,该方法可以执行操作系统命令,并返回结果。例如,可以使用以下代码执行命令: `String cmd = "ls -l"; Process process = Runtime.getRuntime...

    Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!

    这篇博客"Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!"探讨了如何利用`Runtime.exec()`来创建一个简单的命令行界面,尽管这种方式可能并不完美,但不失为一种学习和实践的方法。 `Runtime....

    java系统命令调用

    本文将详细介绍如何使用Java Runtime类中的`getRuntime().exec()`方法来调用系统命令,并提供一些实际应用场景的例子。 ### Java Runtime.getRuntime().exec() `java.lang.Runtime`类提供了运行时系统的表示形式,...

    解决java执行cmd命令调用ffmpeg报错Concat error - No such filter '[0,0]'问题

    然而,在Java中通过`Runtime.getRuntime().exec()`或`ProcessBuilder`执行命令时,可能还会遇到问题,因为这些方法在处理命令行参数时有自己的规则。在某些情况下,即使在DOS窗口中可以成功执行的命令,通过Java执行...

    安卓程序发送linux指令.zip

    `Runtime.getRuntime().exec()` 方法是Java中用于执行外部命令的一个关键接口,它允许Android应用在运行时执行shell命令。在"安卓程序发送linux指令.zip"这个压缩包中,我们重点关注的是如何使用Java在Android应用中...

    Java调用应用程序和Dos中的命令

    `Runtime.exec()`是Java中用来执行外部命令的重要方法之一,它有多种重载形式,其中最常见的两种形式如下: 1. **基本形式**:`Process p = Runtime.getRuntime().exec(command);` - `command`:一个包含要执行的...

    java执行可执行文件或批处理

    `Runtime.getRuntime()`方法用于获取当前Java应用程序的运行时对象,通过这个对象可以调用`exec()`方法来启动一个新的进程。 #### exec()方法详解 `exec()`方法是`Runtime`类中的一个重要成员,它用于启动一个新...

    Java调用Shell命令的方法

    首先,Java通过`Runtime.getRuntime().exec()`方法来执行外部命令,包括Shell命令。这个方法接受一个字符串数组作为参数,其中第一个元素是Shell解释器的路径(通常是`/bin/sh`),第二个元素是`-c`,表示接下来的...

    java代码中调用linux/unix命令

    首先,Java提供了`Runtime`类和`ProcessBuilder`类来执行外部命令。`Runtime.getRuntime().exec()`方法是较早的方式,而`ProcessBuilder`则是Java 5引入的更现代、更灵活的接口。两者都可以用来执行shell命令,但`...

    java中如何调cmd命令

    本文将详细介绍如何利用Java的`Runtime.getRuntime().exec()`方法来实现对CMD命令的调用,并通过具体的例子来帮助读者理解和掌握这一技术。 #### 1. 基本原理 `java.lang.Runtime`类提供了运行时环境的表示,通过...

    通过Java运行一个外部程序

    总结来说,Java通过`Runtime.exec()`方法提供了与操作系统交互的能力,允许我们在Java程序中执行外部程序和命令。然而,为了保证程序的健壮性和安全性,需要对可能出现的异常进行处理,并且谨慎处理用户输入,避免...

    java导出oracle数据(单表).docx

    该过程使用了 Java 语言的 Runtime.getRuntime().exec() 方法来执行 Oracle 的 exp 命令,实现了数据的导出。 知识点 1:Java 中的 Runtime.getRuntime().exec() 方法 在 Java 中,Runtime.getRuntime().exec() ...

    Java调用Linux CenterOS系统安装的OpenOffice4报错

    在Java编程中,有时我们需要与操作系统进行交互,例如在服务器端执行系统命令,这通常通过Java的`Runtime.getRuntime().exec()`或`ProcessBuilder`类来实现。在这个特定的问题"Java调用Linux CentOS系统安装的...

    基于java.lang.Runtime封装的用于简化java调用命令行的工具.zip

    Java语言在执行外部程序或与操作系统交互时,通常会用到`java.lang.Runtime`类。这个类提供了运行时环境的接口,允许Java程序执行系统命令。然而,直接使用`Runtime`类进行命令行操作可能会比较繁琐,需要处理进程的...

    java_bat.rar_DEMO

    - Java使用`Runtime.getRuntime().exec()`方法或者`ProcessBuilder`类来执行系统命令,包括调用批处理文件。这两个方法都是Java.lang.Runtime类的一部分,用于与操作系统进行交互。 2. **使用`Runtime.getRuntime...

    深入研究java.lang.Runtime类.doc

    "深入研究java.lang.Runtime类" java.lang.Runtime 类是 Java 语言中一个非常重要的类,它提供了访问当前 Java 应用程序的 Runtime 环境的能力。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其...

    runtimepermission

    在Android系统中,自API 23( Marshmallow 版本)开始,引入了一项名为“运行时权限”(Runtime Permissions)的重要安全机制。这个机制改变了之前版本中一次性请求所有权限的方式,使得应用在运行时根据需要来请求...

Global site tag (gtag.js) - Google Analytics