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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谷文仁 中级黑马   /  2013-3-22 13:26  /  1673 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谷文仁 于 2013-3-22 16:08 编辑
  1. /*
  2. *
  3. * 复制一个图片
  4. * 思路:
  5. *     1,用字节读取流对象和图片关联
  6. *     2,用字节写入流对象创建一个图片文件。用于存储获取到的图片数据
  7. *     3,通过循环读写,完成数据的存储
  8. *     4,关闭资源
  9. */
  10. public class CopePic {
  11.         @SuppressWarnings("null")
  12.         public static void main(String[] args) throws IOException {
  13.                 FileOutputStream fos = null;
  14.                 FileInputStream fis = null;
  15.                 new FileInputStream("G:\\aaaa.jpg");
  16.                 new FileOutputStream("G:\\bbbb.jpg");
  17.                 byte[] bytes = new byte[1024];
  18.                 int len = 0;
  19.                 while ((len = fis.read(bytes)) != -1) {
  20.                         fos.write(bytes, 0, len);
  21.                 }
  22.         }
  23. }

  24. 异常如下(图片能复制成功但是没有数据)
  25. Exception in thread "main" java.lang.NullPointerException
  26.     at string.test.CopePic.main(CopePic.java:30)

复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

8 个回复

倒序浏览
第十五行和第十六行,都没有引用指向你要读取和存储的对象
改成
           fos =  new FileInputStream("G:\\aaaa.jpg");//将创建的输入流与要读取的文件相关联
           fis =   ew FileOutputStream("G:\\bbbb.jpg");//将创建的输出流与要存储的文件相关联

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
new FileInputStream("G:\\aaaa.jpg");//G:\\aaaa.jpg 确定这个文件存在?

回复 使用道具 举报
谢洋 发表于 2013-3-22 13:36
new FileInputStream("G:\\aaaa.jpg");//G:\\aaaa.jpg 确定这个文件存在?

是他创建的输入流和输出流都没有和指定要读取的文件相关联
他只是直接创建了两个文件输入输出的对象
new FileInputStream("G:\\aaaa.jpg");
new FileOutputStream("G:\\bbbb.jpg");
都没有关联起来
回复 使用道具 举报
张豪杰 发表于 2013-3-22 13:38
是他创建的输入流和输出流都没有和指定要读取的文件相关联
他只是直接创建了两个文件输入输出的对象
new ...

的确这样子
回复 使用道具 举报
IO流引用变量fis,fos没有指向相应的流对象
  1. /*
  2. 复制一个图片
  3. 思路:
  4.         1、用字节读取流对象和图片关联。
  5.         2、用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。
  6.         3、通过循环读写,完成数据的存储。
  7.         4、关闭资源。
  8. */
  9. package iostream;
  10. import java.io.*;

  11. class CopyPicture
  12. {
  13.         public static void main(String[] args)
  14.         {
  15.                 FileInputStream fis = null;
  16.                 FileOutputStream fos = null;
  17.                 try
  18.                 {
  19.                         fis = new FileInputStream("C:\\MYWALL.jpg");
  20.                         fos = new FileOutputStream("C:\\MYWALL_1.jpg");
  21.                         byte[] arr = new byte[1024];
  22.                         int len;
  23.                         while ((len=fis.read())!=-1)
  24.                         {
  25.                                 fos.write(arr,0,len);
  26.                         }
  27.                 }
  28.                 catch (IOException e)
  29.                 {
  30.                         throw new RuntimeException("文件复制失败!");
  31.                 }
  32.                 finally
  33.                 {
  34.                         try
  35.                         {
  36.                                 if(fis!=null)
  37.                                         fis.close();
  38.                         }
  39.                         catch (IOException e)
  40.                         {
  41.                                 throw new RuntimeException("读取关闭失败!");
  42.                         }
  43.                         try
  44.                         {
  45.                                 if(fos!=null)
  46.                                         fos.close();
  47.                         }
  48.                         catch (IOException e)
  49.                         {
  50.                                 throw new RuntimeException("写入关闭失败!");
  51.                         }
  52.                 }
  53.         }
  54. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
杨剑 中级黑马 2013-3-22 14:25:22
7#
fos和fis的值一直都是为null,你new出两个对象,一个是读FileInputStream,一个是写的FileOutputStream,这两个对象并没有赋值给引用变量,引用变量没有操作他们,引用变量fis和fos都是null,所以调用方法时出现空指针异常。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
这样也能复制成功,java的jvm可真强!我建议你把面向对象的基础知识再看看。
回复 使用道具 举报
记得及时处理帖子哦,继续追问,或将分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马