一、前言
本次学习应用于文件操作方面,前面我们说到实现文本的不同处理方式
,本次目的是为了实现各种文件的复制操作。
前面的博客中我们讲到了检测,新建,读取文件修改时间、大小和内容,并向指定文件写入指定内容、文本文件行读取并显示字节和字符数和使用二进制流对任何文件进行复制。
这里我们学习二进制流对任何文件进行移动,因为与上一篇大同小异,所以API中方法和类学习也类似。
二、任务学习
任务要求:
- 通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件移动。
- 不调用 windows命令行的内部命令 move
1)分析学习:
1.1 判断目的地址的父类目录是否存在
当直接使用file.createNewFile
方法时,如果父目录不存在,程序将会抛异常
。
这个方法是在必须父目录存在的情况下移动文件的,只能移动文件,不能移动文件夹,父目录不存在时是需要抛出一个异常的。
所以我们可以先检测父类目录是否存在,然后再进行后面的移动操作。
1.2 在目的地址创建指定的父类目录
为什么用mkdirs()
呢?
因为这个方法可以在不知道有没有父类文件夹的情况下,创建文件夹。
而mkdir()
必须在有父类文件夹的情况下才可创建文件。
- 区别见下图:
boolean mkdir() | boolean mkdirs() |
---|---|
功能:创建子目录 | 功能:创建多级目录 |
创建此抽象路径名指定的目录 | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录 |
当父目录存在时返回true;不存在时返回false | 当父目录不存在时,mkdirs会创建父目录返回true |
1.3 在指定目的地址移动文件
此方法会重新命名此抽象路径名表示的文件 ,即将源地址文件移动到目的地址。
2)程序代码:
/* 项目名称:Task_Du
* 创建时间:2019年4月3日
* 创建者:Administrator_wz
* 创建地点:kmust
* 功能:二进制流对任何文件进行移动
*/
import java.io.*;//导入java.io包中的所有类
import java.io.FileReader;//导入java.io包中的FileReader类
import java.util.Scanner;//导入java.util包中的Scanner类
import java.util.Date;//导入java.util包中的Date类
public class file7{//创建类名
public static void main(String[] args)throws IOException{//程序的主函数入口
try{//用try-catch语句将逻辑语句包起来,并读取指定的文件
//输入将要复制文件的源地址
Scanner s1 = new Scanner(System.in);//获取键盘输入并赋值给s1字符串
System.out.println("请输入想要移动的源地址:");//输入提示信息
String a = s1.nextLine();//定义字符串变量,并赋值为用户输入的信息
File file1 = new File(a);//定义待复制文件源地址
//输入将要复制文件的目的地址
Scanner s2 = new Scanner(System.in);//获取键盘输入并赋值给s2字符串
System.out.println("请输入想要移动的目的地址:");//输入提示信息
String b = s2.nextLine();//定义字符串变量,并赋值为用户输入的信息
File file2 =new File(b);;//创建待复制文件目的地址
if(!file2.getParentFile().exists()) {
file2.getParentFile().mkdirs();//创建父级文件路径
}
file1.renameTo(file2);//创建文件
System.out.println(file2.exists());//输出布尔信息
System.out.println("源文件已经移动到目的地址!");//输出提示信息
System.out.println("该文件最后的修改时间是:"+new Date(file2.lastModified()));//输出文件的修改时间
}catch(Exception e){//当代码异常时用catch捕获异常
e.printStackTrace();//打印异常
}
}
}
3)执行结果
参考链接:
https://blog.csdn.net/u012567345/article/details/73435567
https://blog.csdn.net/mingzhuo_126/article/details/83581801
https://blog.csdn.net/weixin_42014622/article/details/82959678
https://blog.csdn.net/Atishoo_13/article/details/82749935
https://blog.csdn.net/v64501/article/details/83266101
https://blog.csdn.net/lbx1314ybfq/article/details/81490533
https://blog.csdn.net/li627528647/article/details/78728942
https://blog.csdn.net/guojinkun1/article/details/46637821
https://blog.csdn.net/jimzhai/article/details/7854869