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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄗ灬Night|K 中级黑马   /  2013-10-4 12:56  /  1751 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ㄗ灬Night|K 于 2013-10-4 14:21 编辑

为什么程序在编译时OK,运行时却显示“复制失败”呢?
  1. //复制一张图片
  2. import java.io.*;
  3. class  CopyPic
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 FileInputStream fis = null;
  8.                 FileOutputStream fos = null;

  9.                

  10.                 try
  11.                 {
  12.                         fis = new FileInputStream("C:\\111");
  13.                         fos = new FileOutputStream("C:\\222");
  14.                         byte[] by = new byte[1024];
  15.                         int num = 0;
  16.                         while ((num = fis.read(by))!=-1)
  17.                         {
  18.                                 fos.write(by,0,num);
  19.                         }
  20.                 }
  21.                 catch (IOException e)
  22.                 {
  23.                         throw new RuntimeException("复制失败");
  24.                 }
  25.                         finally
  26.                         {        
  27.                                 try
  28.                                 {
  29.                                         if (fis!=null)
  30.                                                 fis.close();
  31.                                 }
  32.                                 catch (IOException e)
  33.                                 {
  34.                                         throw new RuntimeException("读取关闭出错");
  35.                                 }
  36.                                         try
  37.                                         {
  38.                                                 if (fos!=null)
  39.                                                 fos.close();
  40.                                         }
  41.                                         catch (IOException e)
  42.                                 {
  43.                                         throw new RuntimeException("写入关闭出错");
  44.                                 }

  45.                         }
  46.         }
  47. }
复制代码

1.jpg (19.87 KB, 下载次数: 25)

1.jpg

2.jpg (39.98 KB, 下载次数: 28)

c盘中的图片

c盘中的图片

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

4 个回复

倒序浏览
fis = new FileInputStream("C:\\111");
                        fos = new FileOutputStream("C:\\222");
用流操作文件,文件名字得加扩展名,名称不完整就找不到指定文件,抛异常

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
你没把图片的后缀名加上,所以发生了IO异常
fis = new FileInputStream("C:\\111");  //111.jpg或111.PNG,加上你复制的图片后缀名试试看
还有就是win7系统下如果对C盘内的文件进行拷贝好像会出错(xp的我就不清楚),应该是系统盘操作权限不够,换成fis = new FileInputStream("D:\\111.PNG");后我这边就可以复制了。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 2 0
楼上正解,已验证。
1.没加后缀名是一个问题。
2.路径为Win7系统的C盘也会失败,改其他盘就好

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
楼上正解,在windows系统中区分两个文件的属性有两个,一个是文件名,另一个是文件拓展名,你这样写是不规范的

我给你大白话翻译:如果该目录下有两个文件名都是111,而这两个文件的后缀名不相同,windows文件系统认为这两个文件是不同的文件,而虚拟在扫描这个文件目录时,它就要抱异常了,因为它不知道要拿哪个文件,而你又抛了个RuntimeException,那程序铁定中断了

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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