继昨天介绍的IO流之后,今天有给大家带来了干货。由于昨天是用HTML编辑器书写的博客,在添加代码模块我还不是很了解,所以,昨天的代码看着很不舒服,再次向大家致以歉意!因此,今天我换了一种编辑器来完成今天的学习内容。
在平时的学习和工作中,我们在复制文件或者视频或者图片的时候都习惯用 ctrl + C(复制建)和ctrl + V(黏贴键)来完成。但是,如果在这里可以用JavaSe所书写的程序来完成文件或者图片或者视频的复制,是不是感觉非常不可思议呢?接下来,就给大家看一看用JavaSe是如何实现这部分操作的。首先先给大家用文字介绍一下整体的实现过程,再展出代码,供大家参考。
- 文字描述思路:
- 文件要复制,肯定存在从哪里来,要去哪里的问题,这个问题该如何解释呢?在这里,我们可以创建两个文件类型的对象,一个作为源文件,一个作为复制文件;
- 要创建程序与文件沟通交流的路径,那就是两个输入输出文件的对象。此处,源文件作为输入文件,因为程序要读取它的内容,复制文件为输出文件,程序要写出它的内容;
- 以上两步操作做完之后,就要开始内部的架桥工作了。这一步需要进行写入操作,而写入的方式是以字节数组为单位进行的;
- 最后进行关闭文件操作。为什么要关闭文件呢?首先如果不关闭文件可能会出现内存泄漏问题;其次,IO流不属于Java内存资源,因此它不会被Java垃圾回收机制自动回收,而是需要程序员进行手动回收。
代码展示
package com.mec.about_copyFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
//1.先创建一个程序输入的文件和程序输出的文件
//这里要求源文件也就是被复制的文件必须存在
//而即将被复制出来的新文件可以不存在,它会自己创建;
File inFile = new File("One.docx");
File outFile = new File("Two.docx");
//2.创建
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(inFile);
fos = new FileOutputStream(outFile);
//3.创建用于存放文件的字节行数组于记录他长度的变量;读出和写入操作
byte[] b = new byte[2014];
int len;
while((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//5.关闭数据流,因为数据流不属于java内存资源,所以流不会被自动回收,要手动回收
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
以上代码块便是实现简单文件复制的代码。那我们来看看执行的结果是什么:
首先看一下未执行前工程下的目录,我在这里用Eclipse编辑器编辑:
运行之前的工程目录:
运行之后,并刷新之后的工程目录:
打开源文件与复制文件,大家看一看,这是见证奇迹的时刻:
整个过程如上述所示,不知道大家发现了没有,IO流的操作都是以程序为主的,大概可以用如下的箭头来说说明:- 输出流:程序 —— > 文件;
- 输入流:文件 —— > 程序;
输入是由程序输入,输出也是由程序输出,这个概念大概是掌握IO流的操作所不可或缺的理论基础!
今天先学到这里!下次再见~