在学习javaweb的时候,以及在没有打好基础直接去学习框架时都用到了文件下载,文件上传,一直不知道其中的原理,今天特意花了一个小时去学习 java基础的io流
在学习io流时要有一切皆字节的思想!
不管是文件上传,下载,复制都是字节的输入输出操作,所以,在编写这些程序时,必须要了解字节的输入输入操作即IO操作
复制文件的逻辑:
- 创建一个字节输入流对象,构造方法中绑定要读取的数据源
- 创建一个字节输出流对象,构造方法中绑定要写入的目的地
- 使用字节输入流对象中的read方法读取文件
- 使用字节输出流对象中的write方法,把读取到的文件写入到目的地文件中
- 释放资源
方法一:
这个方法相对于耗时较长。我在我本机将一张图片从一个文件夹复制到另一个文件中
package top.klxy.itheima;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @Author: SmallWang
* @Date: 2020/7/20 0020 09:02
* @Version: 1.0
*/
/*
文件复制 : 一读一写
数据源:
目的地:
*/
public class CopyFile {
public static void main(String[] args) throws IOException {
//开始时间 毫秒
long s = System.currentTimeMillis();
//1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
FileInputStream fis = new FileInputStream("E:\\1.jpg");
//2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
FileOutputStream fos = new FileOutputStream("D:\\SelfStudy\\itheima\\2.jpg");
//方法一 耗时:703毫秒
//3.使用字节输入流对象中的方法read读取文件
int len = 0;
while ((len = fis.read()) != -1){
//4.使用字节输出流中的方法write,把读取到的字节写入到目的地文件中
fos.write(len);
}
//释放资源
fis.close();
fos.close();
//结束时间
long e = System.currentTimeMillis();
System.out.println("这个程序耗时" + (e-s) + "毫秒!");
}
}
运行结果:
方法二
耗时短
package top.klxy.itheima;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @Author: SmallWang
* @Date: 2020/7/20 0020 09:02
* @Version: 1.0
*/
/*
文件复制 : 一读一写
数据源:E:\\1.jpg
目的地:D:\\SelfStudy\\itheima\\2.jpg
*/
public class CopyFile {
public static void main(String[] args) throws IOException {
//开始时间 毫秒
long s = System.currentTimeMillis();
//1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
FileInputStream fis = new FileInputStream("E:\\1.jpg");
//2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
FileOutputStream fos = new FileOutputStream("D:\\SelfStudy\\itheima\\2.jpg");
//方法二 耗时: 2毫秒
//使用数组缓冲多个字节 写入多个字节
byte[] bytes = new byte[1024];
//3.使用字节输入流对象中的方法read读取文件
int len = 0; //每次读取有效字节数
while ((len = fis.read(bytes)) != -1){
//4.使用字节输出流中的方法write,把读取到的字节写入到目的地文件中
fos.write(bytes,0,len);
}
//释放资源
fis.close();
fos.close();
//结束时间
long e = System.currentTimeMillis();
System.out.println("这个程序耗时" + (e-s) + "毫秒!");
}
}
运行结果: