Runtime.getRuntime().exec(mkdir)问题

跟着Mic学架构
《Java并发编程深度解析与实战》作者
2010-08-18 10:56:34
问个问题: 我用
Runtime.getRuntime().exec("mkdir "+path);在指定目录建立一个文件夹,在程序里面一直出错
java.io.IOException: error=2
我直接在cmd里面运行是没错的。 找不到原因。

...全文
255 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirrror1986 2010-08-18
  • 打赏
  • 举报
回复
最好自己看一下API
mirrror1986 2010-08-18
  • 打赏
  • 举报
回复
Runtime.getRuntime().exec("cmd.exe /c 命令");
Lena-Yang 2010-08-18
  • 打赏
  • 举报
回复
学习了
钱不是问题 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q331464542 的回复:]
问题被我解决了,分享下
我在原有的基础上加了C:\\WINDOWS\\SYSTEM32\\CMD.EXE /c
Runtime.getRuntime().exec("C:\\WINDOWS\\SYSTEM32\\CMD.EXE /c mkdir "+outputDir);
应该是要指明cmd的路径吧
[/Quote]

哦,学习了
钱不是问题 2010-08-18
  • 打赏
  • 举报
回复
Runtime.getRuntime().exec()不能直接用Dos命令
但可以运行批处理文件

如果你只是新建文件夹就用下面的代码吧

import java.io.*;
class directory{
public static void main(String[] args){
String path = "e:\\tool ";
File file = new File(path);
if(file.exists()){
System.out.println( "the dir is exits ");
}
else{
file.mkdir();
System.out.println( "have made a dir ! " );
}
}
}
跟着Mic学架构 2010-08-18
  • 打赏
  • 举报
回复
问题被我解决了,分享下
我在原有的基础上加了C:\\WINDOWS\\SYSTEM32\\CMD.EXE /c
Runtime.getRuntime().exec("C:\\WINDOWS\\SYSTEM32\\CMD.EXE /c mkdir "+outputDir);
应该是要指明cmd的路径吧
CVE ID: CVE-2010-1870 XWork是一个命令模式框架,用于支持Struts 2及其他应用。 XWork处理用户请求参数数据时存在漏洞,远程攻击者可以利用此漏洞在系统上执行任意命令。 Struts2中WebWork框架使用XWork基于HTTP参数名执行操作和调用,将每个HTTP参数名处理为OGNL(对象图形导航语言)语句,而OGNL将: user.address.city=Bishkek&user['favoriteDrink']=kumys 转换为: action.getUser().getAddress().setCity("Bishkek") action.getUser().setFavoriteDrink("kumys") 这是通过ParametersInterceptor来执行的,使用用户提供的HTTP参数调用ValueStack.setValue()。 除了获取和设置属性外,OGNL还支持其他一些功能: * 方法调用:foo() * 静态方式调用: @java.lang.System@exit(1) * 构建函数调用:new MyClass() * 处理上下文变量:#foo = new MyClass() 由于HTTP参数名为OGNL语句,为了防范攻击者通过HTTP参数调用任意方式,XWork使用了以下两个变量保护方式的执行: * OgnlContext的属性xwork.MethodAccessor.denyMethodExecution(默认设置为true) * SecurityMemberAccess私有字段allowStaticMethodAccess(默认设置为false) 为了方便开发人员访问各种常用的对象,XWork提供了一些预定义的上下文变量: * #application * #session * #request * #parameters * #attr * #context * #_memberAccess * #root * #this * #_typeResolver * #_classResolver * #_traceEvaluations * #_lastEvaluation * #_keepLastEvaluation 这些变量代表各种服务器端对象。为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的unicode字符串表示\u0023,攻击者就可以绕过保护,修改保护Java方式执行的值: #_memberAccess['allowStaticMethodAccess'] = true #foo = new java .lang.Boolean("false") #context['xwork.MethodAccessor.denyMethodExecution'] = #foo #rt = @java.lang.Runtime@getRuntime() #rt.exec('mkdir /tmp/PWNED')
在线阅读 一、 功能所需工具 下载工具 OpenOffice http://zh.openoffice.org/new/zh_cn/downloads.html JodConverter http://dldx.csdn.net/fd.php?i=992314146801277&s=08dbee95a6e2dda1a95aa8cbf4df197b Swftools(pdf2swf) http://dldx.csdn.net/fd.php?i=389133735472350&s=2f7430ad3c00cca78ada8b4671a50b24 FlexPaper http://flexpaper.googlecode.com/files/FlexPaper_1.4.5_flash.zip 二、 搭建所需环境及实现 第一步:安装OpenOffice。从上述下载地址得到可执行安装文件,直接双击执行,安装过程较为人性化,只需选择下一步即可。此处注意下安装路径,文件转换之前需在Windows命令行窗口打开安装根目录,然后执行开启服务命令。 第二步:解压JodConverter。解压目录结构如下图: 打开lib文件夹, 将其中的jar包复制到Web工程的WebRoot/WEB-INF/lib下。 第三步:安装Swftools。从下载的压缩包中解压得到可执行安装文件,直接双击执行。该转换工具用来将pdf文件转换成swf文件。改工具既可以安装使用实现文件转换,也拷贝安装后Program Files下的Swftools文件夹放到工程中,以绿色软件方式来使用。转换命令将在FileConverterUtil.java中特别指明。 第四步:使用Flexpaper。Flexpaper就是一个播放swf文件的播放器。解压后目录如下: 其中Paper.swf、所有的txt文件、php文件夹和example文件夹都可以删掉。清理完之后,新建readFile.jsp(jsp页面代码在后面附加),然后将flexpaper文件夹拷贝到WebRoot下即可。 FileConverterUtil.java代码如下: package com.sdjt.util; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import com.artofsolving.jodconverter.DocumentConverter; import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; /** *

Title:

*

desc: 档案Action类 *

Copyright: Copyright(c)shundesoft 2011

*

company:济南舜德竟天软件有限公司

* @author 温中伟 * @date 2011-10-14 * @version 1.0 * @since */ public class FileConverterUtil{ /** * 实现文件格式转换 * @param sourceFilePath //源文件路径 * @param fullFileName //源文件名称 * @param converterFlag //源文件转换标志 * @throws Exception */ public String convertFile(String sourceFilePath, String fullFileName, String swfToolsPath, String converterFlag) throws Exception{ File sourceFile; //转换源文件 File pdfFile; //PDF媒介文件 File swfFile; //SWF目标文件 File createPath; //创建文件存放目录 Runtime rt; //转换命令执行类 String converFileName = ""; //转换之后的SWF文件名称 String middleFilePath = sourceFilePath.substring(0, sourceFilePath.length()-1); String filePath = (middleFilePath.substring(0, middleFilePath.lastIndexOf("\\"))).substring(0, (middleFilePath.substring(0, middleFilePath.lastIndexOf("\\"))).lastIndexOf("\\")); String fileName = PinYinUtil.getPinYinFirstOrAllLetter(fullFileName.substring(0, fullFileName.lastIndexOf(".")), false)[0]; String fileType = fullFileName.substring(fullFileName.lastIndexOf(".")+1); String folderName = middleFilePath.substring(middleFilePath.lastIndexOf("\\")+1); if(converterFlag.equals("1")){ converFileName = folderName+"/"+fileName+".swf"; }else{ if(fileType.equals("pdf")){ //PDF格式文件处理方式 rt = Runtime.getRuntime(); sourceFile = new File(sourceFilePath+fullFileName); //创建SWF文件存放目录 createPath = new File(filePath+"\\swfFiles\\"+folderName); if(!createPath.isDirectory()){ createPath.mkdir(); } swfFile = new File(filePath+"/swfFiles/"+folderName+"/"+fileName+".swf"); Process p = rt.exec(swfToolsPath+"/pdf2swf.exe " + sourceFile.getPath() + " -o " + swfFile.getPath() + " -T 9"); //缓冲区读入内容清理 clearCache(p.getInputStream(), p.getErrorStream()); converFileName = folderName+"/"+fileName+".swf"; }else{ //非PDF格式文件处理方式 if(isLegal(fileType.toUpperCase())){ sourceFile = new File(sourceFilePath+fullFileName); pdfFile = new File(filePath+"/swfFiles/"+folderName+"/"+fileName+".pdf"); swfFile = new File(filePath+"/swfFiles/"+folderName+"/"+fileName+".swf"); //获取连接对象 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); //取得连接 connection.connect(); //创建文件格式转换对象 DocumentConverter converter = new OpenOfficeDocumentConverter(connection); //实现文件格式转换 converter.convert(sourceFile, pdfFile); //生成已转换的PDF文件 pdfFile.createNewFile(); //释放连接 connection.disconnect(); rt = Runtime.getRuntime(); //执行PDF文件转换成SWF文件命令 Process p = rt.exec(swfToolsPath+"/pdf2swf.exe " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9"); //缓冲区读入内容清理 clearCache(p.getInputStream(), p.getErrorStream()); //删除中转PDF文件 if(pdfFile.exists()){ pdfFile.delete(); } converFileName = folderName+"/"+fileName+".swf"; } } } return converFileName; } /** * 清理缓冲区 * @param isi * @param ise */ public void clearCache(InputStream isi, InputStream ise){ try { final InputStream is1 = isi; //启用单独线程清空InputStream缓冲区 new Thread(new Runnable() { public void run() { BufferedReader br = new BufferedReader(new InputStreamReader(is1)); try { while(br.readLine() != null) ; } catch (IOException e) { e.printStackTrace(); } } }).start(); //读入ErrorStream缓冲 BufferedReader br = new BufferedReader(new InputStreamReader(ise)); //保存缓冲输出结果 StringBuilder buf = new StringBuilder(); String line = null; try { line = br.readLine(); } catch (IOException e) { e.printStackTrace(); } //循环等待进程结束 while(line != null) buf.append(line); is1.close(); ise.close(); br.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 判断所转换文件类型是否合法 * @param getFileType //文件格式 * @param fileLegalFlag //是否合法标志 false:非法 true:合法 */ public boolean isLegal(String getFileType){ boolean fileLegalFlag = false; if(getFileType.equals("TXT")){ fileLegalFlag = true; }else if(getFileType.equals("DOC")||getFileType.equals("DOCX")){ fileLegalFlag = true; }else if(getFileType.equals("PPT")||getFileType.equals("PPTX")){ fileLegalFlag = true; }else if(getFileType.equals("XLS")||getFileType.equals("XLSX")){ fileLegalFlag = true; } return fileLegalFlag; } } readFile.jsp页面代码如下: <%@ page language="java" import="java.lang.String" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String getFilePath = request.getParameter("recFileName"); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html lang="en" xml:lang="en"> <head> <title>在线阅读</title> <style type="text/css" media="screen"> html, body { height:100%; } body { margin:0; padding:0; overflow:auto; } #flashContent { display:none; } </style> [removed][removed] </head> <body>
'), Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, PrintEnabled : false, FullScreenAsMaxWindow : false, ProgressiveLoading : true, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : 'Portrait', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'zh_CN' }}); [removed]
</body> </html> Struts配置文件: OpenOffice服务启动命令: cd C:\Program Files\OpenOffice.org 3\program soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" –nofirststartwizard 需注意的问题 转换TXT时内容中文乱码问题 反编译jodconverter-2.2.2.jar,反编译好的已经放在在线阅读文件夹下。Jodconverter-2.2.1.jar不出现TXT乱码问题,但是不支持office2007格式的文件转换。 Flexpaper不支持中文路径 中文名称的文件转换成了汉语拼音.swf 参考资料 http://topic.csdn.net/u/20110712/18/4daf5746-e64e-434d-aeb0-77b05f6c9903.html http://www.cnblogs.com/qinpeifeng107/archive/2011/08/29/2158879.html http://blog.csdn.net/liuyuhua0066/article/details/6603493 http://blog.csdn.net/lyq123333321/article/details/6546104 http://www.cnblogs.com/compass/articles/2046311.html

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧