黑马程序员技术交流社区

标题: 在复制小文件的时候遇到点小问题 [打印本页]

作者: Forevery    时间: 2013-12-10 19:56
标题: 在复制小文件的时候遇到点小问题
代码如下:
  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.                         }
复制代码

求解
作者: Kyle    时间: 2013-12-10 20:50
代码并没有给全,我补了一些测试了一下,基本上没什么问题。
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. }
复制代码

作者: Forevery    时间: 2013-12-10 22:09
Kyle 发表于 2013-12-10 20:50
代码并没有给全,我补了一些测试了一下,基本上没什么问题。
10,11行图片无法显示是因为你定义了一个buf的 ...

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

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

作者: Forevery    时间: 2013-12-10 22:45
Kyle 发表于 2013-12-10 22:23
首先你的代码有这么几个问题:
1.5~19行是一个try,catch异常处理语句,你并没有给出catch,直接复制你的 ...

没法和你交流




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2