File类
概述:
java中对文本文件这种事物的一种描述的类,定义一些可以操作文本文件的功能和属性,一个文件文件的路径对应就有一个File对象,这个File文件对象就 可以操作对应路径的文件本身
文本文件和File文件对象的关系:
File对象是对文本文件的一种虚拟化
【File对象存在对应的文本文件不一定存在】
File对象是通过文件的路径创建出来的
路径:
绝对路径:
包含磁盘根目录的全路径 比如: C:\a\b.txt
相对路径:
以一个固定的路径为参考得到的部分路径
比如:以c:\a 路径为参考 b.txt就是相对路径
记住:工程项目相对于工程路径 可以使用相对路径
File的构造方法
1、File(String path):
创建一个以path路径为目标文件的文件对象
2、File(String parent, String child):
创建一个以parent+child拼接后的路径为目标文件的文件对象
3、File(File file, String child):
创建一个以file文件对象的路径+child拼接后的路径为目标文件的 文件对象
File的创建方法
概述:
得到File的对象对应有一个文本文件,使用对象调用创建文本文件的功能在对应的路径下创建出来对应的文本文件。 给定的路径是要计划操作的文本文件【有可能不存在】的路径。
只要给我一个路径就可以先得到一个File对象,对象就可以调用相 关功能在磁盘当中创建对应的文本文件。
注意: File对象存在和文本文件是否存在没有关系。
功能:
1、boolean createNewFile():z调用对象对应路径的文本文件。
注意事项:
被调用的时候确保文件所在的目录必须在磁盘中存在 2、boolean mkdir():
创建单级文件夹【就是一个文件夹】
注意事项:
被调用的时候确保文件所在的目录必须在磁盘中存在
3、boolean mkdirs():
创建多级文件夹【多个文件夹】
代码示例:package com.ujiuye.demo; import java.io.File; import java.io.IOException; public class FileCreatMethodDemo { public static void main(String[] args) throws IOException { // File file = new File("E:\\eclipse_code\\java1207\\day17\\a"); File file = new File("E:\\eclipse_code","java1207\\day17\\a"); boolean b = file.mkdir(); System.out.println(b);// 成功 true 反之 false File file1 = new File("c"); boolean b1 = file1.mkdir(); System.out.println(b1);// 成功 true 反之 false // 想要操作那个文件 先得到该文件的File对象 File file2 = new File(file,"b.txt"); boolean c = false; try { c = file2.createNewFile(); } catch (IOException e) { e.printStackTrace(); } System.out.println(c); System.out.println("================"); // File file3 = new File("c\\d\\a.txt"); // boolean d = file3.createNewFile(); // System.out.println(d); File file4 = new File("e\\m\\n"); boolean d = file4.mkdir(); System.out.println(d);// false boolean e = file4.mkdirs(); System.out.println(e); } }
创建方法练习
在 工程路径下的 a/b/c/d 中创建一个文件,名称叫 HelloWorld.txt
分析:
1、创建文件夹 a/b/c/d 【先得到d的file对象】
2、调用mkdirs创建文件夹
3、得到 HelloWorld.txt的File对象
4、调用createNewFile方法
代码示例:package com.ujiuye.demo; import java.io.File; import java.io.IOException; public class FileText { public static void main(String[] args) { // 1、创建文件夹 a/b/c/d 【先得到d的file对象】 File file = new File("a/b/c/d"); // 2、调用mkdirs创建文件夹 file.mkdirs(); // 3、得到 HelloWorld.txt的File对象 File file2 = new File(file, "HelloWorld.txt"); // 4、调用createNewFile方法 try { file2.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } }
File功能
File 的删除功能
delete():
删除磁盘中对应的文本文件
注意:
1、只能删除空的文件夹
2、删除不走回收站
代码示例:package com.ujiuye.demo; import java.io.File; public class FileDemo { public static void main(String[] args) { // 创建要操作的文件的File对象 File file = new File("a\\b\\c\\d"); file.mkdirs(); // 删除 file.delete();// 不走回收站 删除的时候悠着点 【一定备份】 // 先得到b的File对象 File file2 = new File("a\\b"); boolean b = file2.delete(); System.out.println(b);// false 删除的文件夹要求文件夹必须为空 } }
File的重命名方法
renameTo(File dest):
改名字的方法:
使用场景:
同一个文件夹下:重命名的功能
不在同一个文件夹下:剪切功能
代码示例:package com.ujiuye.demo; import java.io.File; public class FileDemo { public static void main(String[] args) { // 同文件夹下改名字 File file3 = new File("a\\b\\c"); File file4 = new File("a\\b\\e"); boolean c = file3.renameTo(file4); System.out.println(c); // 不同文件夹下改名字其实是剪切操作 File file5 = new File("m\\b"); File file6 = new File("n\\b"); boolean d = file6.renameTo(file5); System.out.println(d); } }
File的判断功能
1、exists():判断调用对象对应的文本文件是否在磁盘中存在
2、isFile():判断调用对象对应的文本文件是不是文件
3、isDirectory():判断调用对象对应的文本文件是不是文件夹
注意: isFile和isDirectory方法调用的时候要确保file对象对应的文件
在磁盘中存在才有意义代码示例:
package com.ujiuye.demo; import java.io.File; public class FileDemo { public static void main(String[] args) { // 不同文件夹下改名字其实是剪切操作 File file5 = new File("m\\b"); File file6 = new File("n\\b"); boolean d = file6.renameTo(file5); System.out.println(d); boolean e = file6.exists();// 文本文件在磁盘中的存在状态 System.out.println(e);// false System.out.println(file6.isFile());// false System.out.println(file6.isDirectory());// false System.out.println(file5.isDirectory());// true } }
File的获取功能
1、getAbsolutePath():获取文件对象的绝对路径
2、getPath():获取构造方法传入的路径
3、getName():获取文件对象的文件名
文件对象的名:包含包路径的全限定类名
但是这个方法获取的是不包含包路径的文件名
4、length():
获取文件中内容的长度,单位字节
使用场景:
主要是给文件的File对象调用的,文件夹对象调用没有意义。 文件夹没有大小【大小根据内部文件的大小决定】
5、String[] list():
获取文件夹下所有文本文件的文件名,返回值是一个字符串数组
6、File[] listFiles():
获取文件夹下所有文本文件的File对象,返回值是一个File数组
代码示例:package com.ujiuye.demo; import java.io.File; import java.util.Arrays; public class FileDemo02 { public static void main(String[] args) { // 文件的获取功能 File file = new File("F:\\优就业\\就业班\\java就业班238班(北京)\\day16"); // File file = new File("m\\b"); System.out.println(file.getAbsolutePath()); System.out.println(file.getPath()); System.out.println(file.getName()); System.out.println(file.length());// 4096 File file1 = new File("F:\\优就业\\就业班\\java就业班238班(北京)\\day16\\day16笔记.md"); System.out.println(file1.length());// // file文件夹的对象 获取到的是文件夹内部所有文件的名称数组 String[] list = file.list(); System.out.println(Arrays.toString(list)); // file文件夹的对象 获取到的是文件夹内部所有文件对应的File对象数组 File[] listFiles = file.listFiles(); System.out.println(Arrays.toString(listFiles)); } }
获取功能的练习
键盘录入一个字符串,表示一个文件夹路径,如果不是文件夹路径则提示重新录入
是文件夹:分析:
【重复录入的过程 肯定使用while循环】
判断录入的路径是不是文件夹路径【循环体判断】
把路径变为文件File对象 调用isDirectory方法判断
是【true】:
1、打印当前文件夹下,所有的大于 50M 的后缀名是
.mp4 的文件的绝对路径
①、获取所有的文件的File对象
②、遍历获取到大的File对象的数组得到单个
File对象【录入的文件夹下文件的File对象】 ③、判断File对象是不是文件
是:
1、分别获取大小和名称
2、判断大小是否大于50M同时名称是不
是.mp4结尾 满足:打印绝对路径
2、停止录入【break】
不是【false】:
提示不对重新录入
代码示例:
package com.ujiuye.demo; import java.io.File; import java.util.Scanner; public class FileText { public static void main(String[] args) { // 创建Scanner对象 Scanner sc = new Scanner(System.in); // 在循环中录入路径【字符串】 while (true) { System.out.println("请输入一个文件夹路径:"); String path = sc.nextLine(); // 判断是不是文件夹路径 // 把路径变为File对象 File file = new File(path); // 判断file对象是不是文件夹 if (file.isDirectory()) { // 1、打印当前文件夹下, // 所有的大于 50M 的后缀名是 .mp4 的文件的绝对路径 // 操作的是文件夹在的所有的文件 先得到所有的文件File对象 File[] files = file.listFiles(); // 遍历得到每一个文件夹内部的文件的File对象 for (File file2 : files) { // file2就是每次得到的录入文件夹下的单个文件File对象 // 判断得到的文件File对象是不是文件 if (file2.isFile()) { // 获取大小 long size = file2.length(); // 获取文件的名称 String name = file2.getName(); if (size > 50 * 1024 * 1024 && name.endsWith(".mp4")) { // 打印文件的绝对路径 System.out.println(file2.getAbsolutePath()); } } } // 2、停止录入 break; } else { // 录入的路径有问题 重新输入 System.out.println("录入的路径不对请重新录入:"); } } } }