A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张少威 中级黑马   /  2012-6-1 13:53  /  4620 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张少威 于 2012-6-4 19:43 编辑

7、编写程序拷贝一个文件. 尽量使用效率高的方式。(15分)
我用两种方式,第一种方式没有问题,代码如下:
  1. @Test
  2. public void testCopyFile() throws IOException {
  3.         File file = new File("D:\\googleLogo.jpg.bak.jpg");
  4.         if (file.exists()) {
  5.                 file.delete();
  6.         }
  7.         String fileName = "D:\\googleLogo.jpg";
  8.         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName));
  9.         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileName + ".bak.jpg"));
  10.         byte[] temp = new byte[1024];
  11.         while(bis.read(temp) != -1){
  12.                 bos.write(temp);
  13.         }
  14.         bos.close();
  15.         bis.close();
  16. }
复制代码
以下是第二种方式的代码:
  1. @Test
  2. public void testProperties() throws IOException {
  3.         boolean flag = System.getProperty("os.name").contains("Win");
  4.         if (!flag) {
  5.                 return;
  6.         }
  7.         Runtime runtime = Runtime.getRuntime();
  8.         String cmd = "copy /y d:\\googleLogo.jpg d:\\googleLogo.jpg.bak.jpg";
  9.         Process p = runtime.exec(cmd);
  10.         p.destroy();
  11. }
复制代码
第二种方式会抛出以下异常:
  1. java.io.IOException: Cannot run program "copy": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶
  2.         at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
  3.         at java.lang.Runtime.exec(Runtime.java:593)
  4.         at java.lang.Runtime.exec(Runtime.java:431)
  5.         at java.lang.Runtime.exec(Runtime.java:328)
  6.         at com.itheima.CommonTest.testProperties(CommonTest.java:313)
  7.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  8.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  9.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  10.         at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
  11.         at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
  12.         at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:46)
  13.         at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
  14.         at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
  15.         at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
  16.         at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:1)
  17.         at org.junit.runners.ParentRunner$3.run(ParentRunner.java:246)
  18.         at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:56)
  19.         at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:244)
  20.         at org.junit.runners.ParentRunner.access$0(ParentRunner.java:242)
  21.         at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:237)
  22.         at org.junit.runners.ParentRunner.run(ParentRunner.java:289)
  23.         at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
  24.         at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:76)
  25.         at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:182)
  26.         at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
  27.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  28.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  29.         at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
  30. Caused by: java.io.IOException: CreateProcess error=2, ϵͳÕҲ»µ½ָ¶
  31.         at java.lang.ProcessImpl.create(Native Method)
  32.         at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
  33.         at java.lang.ProcessImpl.start(ProcessImpl.java:30)
  34.         at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
  35.         ... 30 more
复制代码

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
异常上面的写的错误应该是你,进程执行的参数有问题,就是那个字符串中的问题,你最好先打印一下字符串看在cmd中是不是和输入的一致,然后在使用进程执行
回复 使用道具 举报
String [] cmd={"cmd","/C","copy exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);

lz你那么写代码不会认为你的应用程序能执行copy这个命令吧?只有调用人家cmd才行啊
回复 使用道具 举报
String cmd = "copy /y d:\\googleLogo.jpg d:\\googleLogo.jpg.bak.jpg";
Process p = runtime.exec(cmd);楼主这两两句有问题的,copy src des 这样的命令是自己定义的,需要自己识别,java虚拟机是不认识的,不能把它当成系统命令来看待。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马