一、Java.IO包
1定义
i:input输入 o:output输出
java.io包也是Java内置的包,其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类。
2 作用
程序中将数据输出到程序以外或在程序以外将数据输入到程序内。也就是程序与外界的数据交流。可以输出到控制台,文件,或网络上的其他计算机上。
3 引言
程序结束之后,数据从内存中释放。数据在内存中只能临时存储。想要对数据进行持久化存储操作,此时就需要IO技术来完成内存和持久化设备(硬盘、U盘)之间数据的输入输出。IO技术最终是依赖于操作系统,像记事本、word以及Java等等自身是没有输入输出技术的,实现原理是这些软件去调用操作系统的输入输出技术。数据持久化到硬盘中,那么体现形式就是----文件。
硬盘:存储数据资料的地方。
内存:暂时存储CPU需要的数据。
电脑开机后,用户要运行QQ聊天软件。CPU会先找到内存索取QQ数据,接着内存找到硬盘索取QQ全部数据,内存收到硬盘发来的QQ数据,就会传输给CPU,最后用户看到QQ登录界面。内存是CPU和硬盘的数据桥梁。
二、对文件的操作
1 类 File
定义:文件和目录(目录即文件夹)路径名的抽象表示形式。
文件里面有大小、名字、时间等许多信息,java就将文件封装成对象,通过File对象来操作文件。
作用:File类的对象不但可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录;File类对象不能直接对文件进行读写操作。
文件属性信息:
2 获取文件信息常用方法
public static void main(String[] args) {
//创建File对象
File file = new File("D:\\Eclipse\\workspace\\JavaSe_IO\\day20.txt");
//获取绝对路径
System.out.println(file.getAbsoluteFile());
//获取相对路径(构造方法内部写的路径)
System.out.println(file.getPath());
//获取文件大小(java中大小要么length要么size)
long size = file.length();
System.out.println(size);
//获取文件名称
String fileName = file.getName();
System.out.println(fileName); //结果:day20.txt
//获取文件上一次修改时间,结果是一个毫秒值。
long time = file.lastModified();
Date date = new Date(time);
String lastModified = DateFormat.getDateTimeInstance().format(date);
System.out.println(lastModified);
}
3 文件操作方法
public class File_02 {
/*
* 操作文件
*/
public static void main(String[] args) throws IOException {
File file = new File("D:" + File.separator + "coco.txt");
/*
* 创建文件:createNewFile() (1)如果文件不存在,方法返回结果为true。
* (2)如果文件已存在,则不能够再创建,方法返回false。 (3)如果路径名错误或者磁盘空间不足,抛出IOException。
* 因此此方法需要对IO异常进行捕获或者声明处理。
*/
boolean b1 = file.createNewFile();
System.out.println(b1);
// 删除文件:delete()。(java中删除要么delete要么remove)
boolean b2 = file.delete();
System.out.println(b2);
// 判断文件是否存在:exists();
boolean b3 = file.exists();
System.out.println(b3);
// 判断是否是一个文件isFile(),要先判断文件是否存在。
boolean b4 = file.isFile();
System.out.println(b4);
// 重命名,移动(文件名重改,内容依旧存在)renameTo();
// (1)定义新文件名
File dest = new File("D:" + File.separator + "amo.txt");
// (2)传入新文件名对象
boolean b5 = file.renameTo(dest);
System.out.println(b5);
}
}
4 目录操作方法
public class File_03 {
/*
* 操作目录
*/
public static void main(String[] args) {
//1.创建目录
File file = new File("D:\\a\\b\\c\\d");// 将d封装成File对象
/* (1)创建文件夹对象mkdir(),如果文件夹对象上级目录存在,则无法创建返回false。
* (2)创建多层文件夹mkdirs()。
*/
boolean b1 = file.mkdirs();
System.out.println(b1);
//2.判断是否是文件夹
/* 判断是否是文件夹还是文件?
* (1)首先要判断文件或文件夹是否存在。不存在判断都为false。
* (2)判断文件isFile();判断文件夹isDirectory()。
*/
boolean b3 = file.isDirectory();
System.out.println(b3);
//3.删除文件夹对象,该文件夹为空才可删除。
boolean b2 = file.delete();
System.out.println(b2);
}
}
5 示例代码
需求:获取目录的下一级内容
public class file_04 {
/*
* 获取的下一级内容存放在数组中。
* 不需要放在集合中,因为不需要进行增删元素操作。
*/
public static void main(String[] args) {
// 1 创建file对象,将父目录封装成对象
File dir = new File("D:\\Eclipse\\workspace");
// 2 方法一:获取当前目录下的所有文件和目录的文件名,返回String数组
String[] names = dir.list();
for(String name : names){
System.out.println(name);
}
/* 2 方法二:获取当前目录下的所有文件和目录的绝对路径,返回File数组。
返回的是一个File类的引用,具有此类的所有属性和方法*/
File [] files = dir.listFiles();
for(File file : files){
System.out.println(file.getName());
System.out.println(file.lastModified());
}
// 这两种方法的File对象必须是一个目录且必须已存在,否则返回空指针异常。
}
}