下面是我在Java程序中调用Windows 下的ren命令对一个rar文件重命名,但是程序就会抛出IOException,重命名的文件名称为,数据发生量.rar,我想把它重命名为 数据发生量 去掉后缀名
 
try {
            CMDRenameFile ="ren " + fileWillRename.getCanonicalPath() + " " +fileWillRename.getName().replaceAll(".rar", "");
              System.out.println(CMDRenameFile);
        } catch (IOException ex) {
            log.error(ex);
        }     
        Process proc = null;
        try {
            proc = Runtime.getRuntime().exec(CMDRenameFile);
            if (proc.waitFor() != 0) {
                return false;
            }
        } catch (IOException ex) {
           log.error(this, ex);
        } catch (InterruptedException ex) {
           log.error(this, ex);
        } 当程序执行到这句 proc = Runtime.getRuntime().exec(CMDRenameFile); 的时候发生错误下面是出错信息,我的项目用的是GBK编码。ERROR - datavalidate.tools.Rename@7cb44d
java.io.IOException: Cannot run program ""CMDRenameFile"": CreateProcess error=2, ?????????
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at datavalidate.tools.Rename.renameTo(Rename.java:21)
at datavalidate.DataValidateView.exeValidateMouseClicked(DataValidateView.java:462)
at datavalidate.DataValidateView.access$9(DataValidateView.java:306)
at datavalidate.DataValidateView$4.mouseClicked(DataValidateView.java:156)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.Component.processMouseEvent(Component.java:6266)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.io.IOException: CreateProcess error=2, ?????????
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 28 more

解决方案 »

  1.   

    首先你要运行ren,实际上用Java中的方法就可以啦,
    如果你坚持使用ren命令,那么应该要"cmd /c ren a.txt b.txt"这样才行,因为ren是cmd的内置命令,不是一个可以运行的程序。而且从日志中看,Cannot run program ""CMDRenameFile"": 你CMDRenameFile的值应该不正确。你打印一下那个值看看吧