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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨银川 黑马帝   /  2011-12-20 23:23  /  1503 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨银川 于 2011-12-21 18:28 编辑

public void run() {
                // TODO Auto-generated method stub
                String ip=s.getInetAddress().getHostAddress();
                try {
                        System.out.println("ip:"+ip);
                        InputStream in=s.getInputStream();
                       
                        FileOutputStream fos=new FileOutputStream("D:\\Test\\test\\server.jpg");
                        byte[] buf=new byte[1024];
                        int len=0;
                        while((len=in.read(buf))!=-1){
                                fos.write(buf, 0, len);
                        }
                        //反馈
                        OutputStream out=s.getOutputStream();
                        out.write("上传成功".getBytes());
                        s.close();
                        fos.close();
                } catch (Exception e) {
                        // TODO: handle exception
                        throw new RuntimeException(ip+"上传失败");
                }
以上是我写的上传图片部分代码,我的问题是如果把fos.close();换成in.close(),怎么图片是0kb,我是在最后关的啊,应该是把数据都读写完了,再关的,怎么一个数据都没读到,是不是多线程执行的问题啊?

2 个回复

倒序浏览
我这里有可以成功运行的代码你可以参考一下。
package com.io.test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class test4 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                FileInputStream  fin=null;
                FileOutputStream  fos=null;
                try
                {
                        fin=new FileInputStream("c:/defaultSkin.png");
                        fos=new FileOutputStream("c:/1.png");
                       
                        byte[] buf=new byte[1024];
                       
                        int length=0;
                        while((length=fin.read(buf)) != -1)
                        {
                                fos.write(buf,0,length);
                        }
                       
                       
                }
                catch(IOException e)
                {
                         throw new RuntimeException("读写失败");
                }
                finally
                {
                        if(fin != null)
                        {
                                  try {
                                        fin.close();
                                } catch (IOException e) {
                                        throw new RuntimeException("关闭写入失败");
                                }
                        }
                        if(fos != null)
                        {
                                  try {
                                        fos.close();
                                } catch (IOException e) {
                                        throw new RuntimeException("关闭读出失败");
                                }
                        }
                }

        }

}
回复 使用道具 举报
把fos.close();换成in.close().....
----fos是输出流,而in是输入流,应该不能这样替换吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马