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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

代码如下:
  1. public static void main(String[] args)
  2.         {
  3.                 FileOutputStream fos = null;
  4.                 FileInputStream fis = null;
  5.                 try
  6.                 {
  7.                         fos = new FileOutputStream("c:\\shuaige.jpg");
  8.                         fis = new FileInputStream("c:\\1.jpg");
  9.                        
  10.                         //byte[] buf = new byte[fis.available()];图片为什么会无法显示
  11.                         //fos.write(buf);
  12.                         byte[] buf = new byte[1024];

  13.                         int len = 0;

  14.                         while((len=fis.read(buf))!=-1)
  15.                         {
  16.                                 fos.write(buf,0,len);
  17.                         }
复制代码

求解

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

4 个回复

倒序浏览
代码并没有给全,我补了一些测试了一下,基本上没什么问题。
10,11行图片无法显示是因为你定义了一个buf的空数组,并没有写入数据就直接用空数组写出数据了。
代码更正如下:
  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;

  3. public class Test {
  4.         public static void main(String[] args) throws Exception {
  5.        
  6.                 FileOutputStream fos = null;
  7.                 FileInputStream fis = null;
  8.                 try
  9.                 {
  10.                         fos = new FileOutputStream("c:\\shuaige.jpg");
  11.                         fis = new FileInputStream("c:\\1.jpg");
  12.                         
  13.                         byte[] buf = new byte[fis.available()];//图片为什么会无法显示
  14.                         fis.read(buf);
  15.                         fos.write(buf);
  16.                         /*byte[] buf = new byte[1024];

  17.                         int len = 0;

  18.                         while((len=fis.read(buf))!=-1)
  19.                         {
  20.                                 fos.write(buf,0,len);
  21.                      
  22.                         }*/
  23.                 }catch(Exception e) {
  24.                                 e.printStackTrace();
  25.                 }
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
Kyle 发表于 2013-12-10 20:50
代码并没有给全,我补了一些测试了一下,基本上没什么问题。
10,11行图片无法显示是因为你定义了一个buf的 ...

其实那样写是可以的,那个数组你在复制小文件的时候完全没有问题。但是在复制大文件的时候就会出错,byte[] buf = new byte[fis.available()];是定义了一个长度刚好的数组,所以不需要遍历。我还以为有人懂的呢,这是我在考你们呢
回复 使用道具 举报
Forevery 发表于 2013-12-10 22:09
其实那样写是可以的,那个数组你在复制小文件的时候完全没有问题。但是在复制大文件的时候就会出错,byte ...

首先你的代码有这么几个问题:
1.5~19行是一个try,catch异常处理语句,你并没有给出catch,直接复制你的代码100%报错。
2.当你打开10和11行代码,关闭12~19行的正常输入输入流代码,仅10和11行的代码复制文件,百分百复制失败。因为只有10,11行的时候没有任何读取数据的操作。
回复 使用道具 举报
Kyle 发表于 2013-12-10 22:23
首先你的代码有这么几个问题:
1.5~19行是一个try,catch异常处理语句,你并没有给出catch,直接复制你的 ...

没法和你交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马