Java实现文件的下载

一、技术点:IO流、套接字

二、代码案例

1、客户端

package com.mollen.download;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

/**
* @ClassName:  Client
* @Auther:     Mollen
* @CreateTime: 2018-09-11  11:29:47
* @Description:
*              文件下载客户端
*/
public class Client {
   public static void main(String[] args) throws IOException {
       //1.创建socket对象
       Socket client = new Socket("127.0.0.1",6666);
       //2.获取读入流
       InputStream is = client.getInputStream();
       //3.创建写出流
       FileOutputStream fos = new FileOutputStream("E:\\download\\" + System.currentTimeMillis() + ".avi");
       //4.读入流数据,写出到客户端磁盘
       int len =0;
       byte[] bytes = new byte[10240];
       while((len=is.read(bytes))!=-1){
           fos.write(bytes,0,len);
       }
       //发送回执信息
       client.getOutputStream().write("文件下载完成!".getBytes());
       
       //释放资源
       is.close();
       fos.close();
       client.close();
   }
}

2、服务端

package com.mollen.download;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
* @ClassName: Server
* @Auther: Mollen
* @CreateTime: 2018-09-11  11:29:39
* @Description:
*/
public class Server {
   public static void main(String[] args)throws IOException{
       //1.创建serversocket
       ServerSocket server = new ServerSocket(6666);
       
	   while(true) {
	       //2.创建读取流对象
	       FileInputStream fis = new FileInputStream("H:\\1002.avi");            
           //3.监听客户端
           Socket client = server.accept();
           //4.获取写出流
           OutputStream os = client.getOutputStream();
           //5.读入服务端文件,写入到数据流
           int len = 0;
           byte[] bytes = new byte[10240];
           while ((len = fis.read(bytes)) != -1) {
               os.write(bytes, 0, len);
           }

           //写出结束标志
           client.shutdownOutput();

           //读取回执信息
           BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
           System.out.println(br.readLine());
           
            //释放资源
            fis.close();
            os.close();
            client.close();
       }
   }
}

三、注意事项

1、数据运输路径:服务端磁盘–>(读入)–>(写出)–>数据流–>(读入)–>(写出)–>客户端磁盘。
2、案例不考虑多线程、缓存、解析等技术的应用。
3、写出完毕必须有结束标志。
4、测试先启动服务端再启动客户端。

摘自:https://blog.csdn.net/mollen/article/details/82624551

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值