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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任奇 黑马帝   /  2012-2-6 20:16  /  1688 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 任奇 于 2012-2-6 21:56 编辑

下面的代码,为什么写不进去?
fis = new FileInputStream("c:\\a\\1.jpg");
fos = new FileOutputStream("c:\\a\\2.jpg");
byte[] buf = new byte[fis.available()];
fis.read(buf);
fos.write(buf,0,fis.available());

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

6 个回复

倒序浏览
写入流要记得刷新,fos.flush();
貌似楼主也没关闭.
回复 使用道具 举报
彭沛东 发表于 2012-2-6 20:53
写入流要记得刷新,fos.flush();
貌似楼主也没关闭.

在finally地方写了。没用哦,挺奇怪的。
回复 使用道具 举报
问题出在 fis.available()。fis.read(buf);之后,fis.available()为0,输出一瞧就见究竟:
  1. public class Test{
  2.         public static void main(String[] args)  throws IOException
  3.         {
  4.                 FileInputStream fis = new FileInputStream("aix.png");
  5.                 // fis = new FileInputStream("c:\\a\\1.jpg");
  6.                 FileOutputStream fos = new FileOutputStream("aix1.png");
  7.                 byte[] buf = new byte[fis.available()];
  8.                 fis.read(buf);
  9.                 System.out.println(fis.available());
  10.                 // fos.write(buf,0,fis.available());
  11.                 fos.write(buf);
  12.                 // fos.flush();
  13.                 // fos.close();
  14.                 // fis.close();
  15.         }
  16. }
复制代码
故用 fos.write(buf);就行了。

点评

谢了。  发表于 2012-2-6 21:55

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
这是全代码:
import java.io.*;
public class CopyPic
{
        public static void main(String[] args)
        {
                FileInputStream fis = null;
                FileOutputStream fos = null;
                try
                {
                        fis = new FileInputStream("c:\\a\\1.jpg");
                        fos = new FileOutputStream("c:\\a\\2.jpg");
                        byte[] buf = new byte[fis.available()];
                        fis.read(buf);
                        fos.write(buf,0,fis.available());
                }
                catch (IOException e)
                {
                        System.out.println(e.toString());
                }
                finally
                {
                        if(fis!=null)
                        {
                                try
                                {
                                        fis.close();
                                }
                                catch (IOException e)
                                {
                                        System.out.println(e.toString());
                                }
                        }
                        if(fos!=null)
                        {
                                try
                                {
                                        fos.close();
                                }
                                catch (IOException e)
                                {
                                        System.out.println(e.toString());
                                }
                        }
                }
        }
}

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 黑马唐浩 于 2012-2-6 23:04 编辑

Mission Completed{:soso_e120:}累死了
  1. public class CopyImage
  2. {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 FileInputStream fis = null;
  6.                 FileOutputStream fos = null;

  7.                 fis = new FileInputStream("c:\\a\\1.jpg");
  8.                 fos = new FileOutputStream("c:\\a\\2.jpg");

  9.                 // 出处调用read方法是为了让下面的available方法能够返回所需字节数。
  10.                 int firstChar = fis.read();

  11.                 byte[] buf = new byte[fis.available()];
  12.                
  13.                 //这一步是因为上面已经执行了的int firstChar = fis.read()
  14.                 buf[0] = (byte) firstChar;

  15.                 int len = fis.read(buf,1,fis.available()-1);
  16.                
  17.                 fos.write(buf, 0, len);
  18.                  
  19.                 fos.close();
  20.                 fis.close();
  21.         }
  22. }
复制代码
回复 使用道具 举报
并附上API一小份。

available
public int available()
              throws IOException返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。下一个调用方可能是同一个线程,也可能是另一个线程。
类 InputStream 的 available 方法总是返回 0。

此方法应该由子类重写。


返回:
可以不受阻塞地从此输入流读取的字节数。
抛出:
IOException - 如果发生 I/O 错误。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

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