1. java的IO流
input输出:所有往内存中送数据的都是输入
output输出:所有的从内存中出数据都是输出
能用java.io包的api方法操作的输入输出
内存–>外存(硬盘,光盘,U盘) 本地流输出
内存<–外存 本地流输入
2. 结合Socket网络编程
** 内存–>网络上 网络流输出
内存<–网络上 网络流输入**
**网络流的案例
计算机A 和远程计算机B**
从计算机B的计算机上下载文件到计算机A上
1.先从B中的硬盘上本地流输入,把硬盘上文件读入到B的内存
2.把内存中的文件数据网络流输出,把内存数据输出到网络上
3.计算机A网络流输入,把网络上的文件数据读入到A的内存
4.把A内存中的数据,本地流输出到A的硬盘上
上传文件的过程跟下载是相反的
例:
基于socket(TCP)通信 , IO流 , 多线程 实现的简单文件传输功能
服务器端:
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端:给客户端提供服务
* 1.接收客户端发送过来的文件路径,并判断文件是否存在
* 2.获取文件的名称和文件的长度,并写网络上
* 3.从本服务器硬盘读取文件内容到内存
* 4.把内存的文件数据写到网络上
*
* 多线程可以给多个客户端提供服务
* @author ZhangYang
*
*/
public class Service {
public static void main(String[] args) throws Exception{
//创建了一个服务器ServerSocket对象并设置端口号
ServerSocket servicesocket = new ServerSocket(9999);
System.out.println("服务器端已经启动");
while (true) {
//监听9999端口
Socket socket = servicesocket.accept();
ThreadTool tt= new ThreadTool(socket);
Thread t = new Thread(tt);
t.start();
}
}
}
线程逻辑实现类:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOExcepti