JAVA基础编程102——文件下载

一、技术点: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、测试先启动服务端再启动客户端。

猜你喜欢

转载自blog.csdn.net/mollen/article/details/82624551