本文共 14082 字,大约阅读时间需要 46 分钟。
File类
概述
1、概述
java.IO.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
我们可以使用File类的方法:
创建文件/文件夹
删除文件/文件夹
判断文件/文件是否存在
对文件夹进行遍历
获取文件大小
2、注意
File类是一个与操作系统无关的类,任何操作系统都可以用这个类中的方法
3、重点:记住三个单词
file、director、path
File类的静态成员变量
1、与系统相关的路径分隔符
package day08;import java.io.File;public class demo07 { public static void main(String[] args) { String pathSeparator = File.pathSeparator; System.out.println(pathSeparator);//路径分隔符 windows:分号 Linux:冒号 }}
package day08;import java.io.File;public class demo07 { public static void main(String[] args) { String pathSeparator = File.pathSeparator; System.out.println(pathSeparator);//路径分隔符 windows:分号 Linux:冒号 char pathSeparatorChar = File.pathSeparatorChar; System.out.println(pathSeparatorChar); /** * ; * ; */ }}
路径分隔符:windows ";",linux ":"
2、与系统相关的默认文件分隔符
package day08;import java.io.File;public class demo07 { public static void main(String[] args) { String pathSeparator = File.pathSeparator; System.out.println(pathSeparator);//路径分隔符 windows:分号 Linux:冒号 char pathSeparatorChar = File.pathSeparatorChar; System.out.println(pathSeparatorChar); /** * ; * ; */ String separator = File.separator; System.out.println(separator);//文件名称分隔符 windos:反斜杠\ Linux:/ char separatorChar = File.separatorChar; System.out.println(separatorChar); }}
文件名称分隔符: windos:反斜杠\ ,Linux:/
绝对路径&相对路径
1、绝对路径
绝对路径:指的是一个完整的路径,以盘符开始的路径
C:\Users\YIAN\Desktop\File\task.txt
2、相对路径
相对路径:是一个简化的路径
相对指的是相对于当前项目的根目录(D:\IdeaProjects\JinJie\src\day08\demo07.java)
如果使用当前项目的根目录,路径可以简写
例如:
C:\Users\YIAN\Desktop\File\task.txt
简写:
task.txt
3、注意
1.路径不区分大小写
2.路径中的文件名称分隔符windows使用反斜杠/,反斜杠是转义字符,所以在java中两个反斜杠,代表一个普通斜杠//
构造方法
public File(String pathname);
通过给定的路径名字符串 转换为 抽象路径名来创建新的File实例
package day08.day08_1;import java.io.File;public class day08_1 { public static void main(String[] args) { show("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); } public static void show(String pathname){ File file = new File(pathname); System.out.println(file); // 返回 C:\Users\YIAN\Desktop\File\a.txt }}
参数:
String pathname:字符串路径名称
路径可以以文件结尾,也可以是以文件夹结尾
package day08.day08_1;import java.io.File;public class day08_1 { public static void main(String[] args) { //以文件夹结尾 show("C:\\Users\\YIAN\\Desktop\\File\\Dircetory"); //以文件结尾 show("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); } public static void show(String pathname){ File file = new File(pathname); System.out.println(file); }}
路径可以是绝对路径,也可以是相对路径
package day08.day08_1;import java.io.File;public class day08_1 { public static void main(String[] args) { //使用绝对路径 show("C:\\Users\\YIAN\\Desktop\\File\\Dircetory");//C:\Users\YIAN\Desktop\File\Dircetory //使用相对路径 show("a.txt");//a.txt } public static void show(String pathname){ File file = new File(pathname); System.out.println(file); }}
注意:
创建File对象,只是把字符串路径封装为File对象(不会判断实例文件是否真的存在),不考虑路径的真假情况
public File(String parent,String child)
从父路径名字字符串和子路径字符串创建新的File实例
package day08.day08_1;import java.io.File;public class day08_02 { //public File(String parent,String child) public static void main(String[] args) { //给定 父路径 子路径 methodB("C:\\Users\\YIAN\\Desktop\\File","task.txt"); } public static void methodB(String parent,String child){ File file = new File(parent,child); System.out.println(file); //返回 C:\Users\YIAN\Desktop\File\task.txt }}
参数:把文件分成了两部分
String parent:父路径
String child:子路径
好处:
父路径和子路径可以单独写,使用起来灵活;父子路径都可以变化
package day08.day08_1;import java.io.File;public class day08_02 { //public File(String parent,String child) public static void main(String[] args) { //给定 父路径 子路径 methodB("C:\\Users\\YIAN\\Desktop\\File","task.txt"); //返回 C:\Users\YIAN\Desktop\File\task.txt methodB("d:\\","a.txt"); //返回 d:\a.txt } public static void methodB(String parent,String child){ File file = new File(parent,child); System.out.println(file); }}
public File(File parent,String child)
从父抽象路径名和子路径名字符串创建新的File实例
package day08.day08_1;import java.io.File;public class day08_03 { public static void main(String[] args) { //创建File对象 File parent = new File("d:\\"); methodC(parent,"a.txt"); //返回 d:\a.txt } public static void methodC(File parent, String child){ File file = new File(parent,child); System.out.println(file); }}
参数:把文件分成了两部分
File parent:父路径
String child:子路径
好处:
父路径和子路径可以单独写,使用起来灵活;父子路径都可以变化
父路径是File类,可以使用File的方法对路径进行一些操作,再使用路径创建对象
常用方法---获取功能的方法
public String getAbsolutePath();
返回此File的绝对路径
package day08.day08_2;import java.io.File;public class demo01 { //getAbsolutePath() 返回File路径 public static void main(String[] args) { //绝对路径 File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.text"); //相对路径 File f2 = new File("b.text"); String absolutePath1 = f1.getAbsolutePath(); System.out.println(absolutePath1); //C:\Users\YIAN\Desktop\File\a.text String absolutePath2 = f2.getAbsolutePath(); System.out.println(absolutePath2); //D:\IdeaProjects\JinJie\b.text }}
注意:无论File实例是绝对路径还是相对路径 返回的都是绝对路径
public String getPath();
将此File转换为路径名字符串
package day08.day08_2;import java.io.File;public class demo02 { public static void main(String[] args) { File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.text"); String path = f1.getPath(); System.out.println(path); //C:\Users\YIAN\Desktop\File\a.text File f2 = new File("a.text"); String path1 = f2.getPath(); System.out.println(path1); //a.text }}
绝对路径返回绝对路径名字符串
相对路径返回相对路径名字符串
public String getName();
返回由此File表示的文件或文件夹名称。
package day08.day08_2;import java.io.File;public class demo03 { public static void main(String[] args) { File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); String name1 = f1.getName(); System.out.println(name1); //返回文件夹名 a.txt File f2 = new File("b.txt"); String name2 = f2.getName(); System.out.println(name2); //返回文件名 b.txt File f3 = new File("C:\\Users\\YIAN\\Desktop\\File"); String name3 = f3.getName(); System.out.println(name3); //返回文件夹名 File }}
public long length();
返回由此File表示的文件的长度(大小 字节为单位)
注意:
1.文件夹是没有大小概念的,不能获取文件夹大小
2.如果构造方法给出的路径不存在,那么length方法返回0
package day08.day08_2;import java.io.File;public class demo04 { public static void main(String[] args) { //真实存在的文件 File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\task.txt"); long length1 = f1.length(); System.out.println(length1);//返回 9 字节 //不存在的文件 File f2 = new File("C:\\Users\\YIAN\\Desktop\\File\\b.jpg"); long length2 = f2.length(); System.out.println(length2);//返回 0字节 //测试获取文件大小 File f3 = new File("C:\\Users\\YIAN\\Desktop\\File"); long length3 = f3.length(); System.out.println(length3);// 返回 0字节 }}
常用方法---判断功能的方法
public boolean exists();
此File表示的文件或目录是否实际存在
package day08.day08_2;import java.io.File;public class demo05 { public static void main(String[] args) { File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\"); System.out.println(f1.exists());//存在此文件夹 true File f2 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); System.out.println(f2.exists());//不存在此文件 false //相对路径 File f3 = new File("JinJie.iml"); System.out.println(f3.exists());//存在此文件 true }}
public boolean isDirectory()
此File表示的是否为目录(判断此目录是否存在)
public Boolean isFile()
此File表示的是否为文件(判断此文件是否存在)
package day08.day08_2;import java.io.File;public class demo06 { public static void main(String[] args) { File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\"); File f2 = new File("JinJie.iml"); File f3 = new File("C:\\Users\\YIAN\\Desktop\\File\\test.txt"); //先判断文件是不是存在 if(f1.exists()){ //判断是否为文件夹 System.out.println(f1.isDirectory()); //true //判断是否为文件 System.out.println(f1.isFile()); //false } if(f2.exists()){ //判断是否为文件夹 System.out.println(f2.isDirectory()); //false //判断是否为文件 System.out.println(f2.isFile()); //true } //文件不存在 不进行if 中的代码 if(f3.exists()){ //判断是否为文件夹 System.out.println(f3.isDirectory()); //true //判断是否为文件 System.out.println(f3.isFile()); //false } }}
常用方法---创建删除功能的方法
public boolean creatNewFile();
当且仅当具有该名称的文件尚不存在,创建一个新的空文件(当前文件夹没有,才能创建)
返回值:布尔值
true:文件不存在,创建文件,返回true
package day08.day08_2;import java.io.File;import java.io.IOException;public class demo07 { public static void main(String[] args) { //在 C:\Users\YIAN\Desktop\File\ 文件目录下 创建1.txt File file = new File("C:\\Users\\YIAN\\Desktop\\File\\","1.txt"); try { boolean newFile = file.createNewFile(); System.out.println(newFile); //true 创建成功 } catch (IOException e) { e.printStackTrace(); } }}
false:文件存在,不会创建,返回false
package day08.day08_2;import java.io.File;import java.io.IOException;public class demo07 { public static void main(String[] args) { //再次 在 C:\Users\YIAN\Desktop\File\ 文件目录下 创建1.txt File file = new File("C:\\Users\\YIAN\\Desktop\\File\\","1.txt"); try { boolean newFile = file.createNewFile(); System.out.println(newFile); //false 创建失败 } catch (IOException e) { e.printStackTrace(); } }}
注意:
1、此方法只能创建文件,不能创建文件夹
package day08.day08_2;import java.io.File;import java.io.IOException;public class demo08 { public static void main(String[] args) { //通过creatNewFile创建文件夹 File file = new File("C:\\Users\\YIAN\\Desktop\\File\\","directory"); try { boolean newFile = file.createNewFile(); System.out.println(newFile);//true 这里返回true 实际上创建成功的还是文件 没有后缀名的文件 } catch (IOException e) { e.printStackTrace(); } }}
2、创建文件的路径必须存在,否则会抛出异常
public boolean mkdir();
创建由此File表示的目录(单级文件夹)
package day08.day08_2;import java.io.File;import java.io.IOException;public class day09 { public static void main(String[] args) throws IOException { File file = new File("C:\\Users\\YIAN\\Desktop\\File\\file1"); boolean mkdir = file.mkdir(); System.out.println(mkdir);//true }}
注意:必须确保创建的文件夹不存在 才能创建
public boolean mkdirs();
创建由此File表示的单级/多级文件夹
package day08.day08_2;import java.io.File;public class demo10 { public static void main(String[] args) { //创建单级文件夹 File file = new File("C:\\Users\\YIAN\\Desktop\\File1"); boolean mkdirs = file.mkdirs(); System.out.println(mkdirs);//true }}
package day08.day08_2;import java.io.File;public class demo10 { public static void main(String[] args) { //创建单级文件夹 File file = new File("C:\\Users\\YIAN\\Desktop\\File2\\file2_1\\file2_1_1"); boolean mkdirs = file.mkdirs(); System.out.println(mkdirs);//true }}
public boolean delete();
此方法可以删除构造方法路径给出的文件/文件夹
返回值:布尔值
true:文件/文件夹删除成功,返回true
false:文件夹中有内容,不会删除返回false;构造方法中的路径不存在返回false
注意:
delete方法是直接在硬盘删除文件/文件夹,不走回收站
package day08.day08_2;import java.io.File;import java.io.IOException;public class demo10 { public static void main(String[] args) throws IOException { //创建单级文件夹 File file = new File("C:\\Users\\YIAN\\Desktop\\File\\file1_1"); //创建文件夹 if(file.mkdirs()==true){ System.out.println("文件夹创建成功"); } //创建文件 File direct = new File(file, "1.txt"); boolean newFile = direct.createNewFile(); if(newFile == true){ System.out.println("文件创建成功"); } //删除文件 boolean del = direct.delete(); if(del ==true){ System.out.println("指定路径文件已删除"); } //删除文件夹 boolean delF = file.delete(); if(delF==true){ System.out.println("文件夹删除成功"); } }}
目录的遍历
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。(返回文件夹/文件名)
package day08.day08_2;import java.io.File;import java.io.IOException;public class demo10 { public static void main(String[] args) throws IOException { //创建单级文件夹 File file = new File("C:\\Users\\YIAN\\Desktop\\File"); //遍历文件目录 for (String list:file.list() ) { System.out.println(list); } /** * 1.txt * directory * file1_1 * task.txt */ }}
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。(返回带绝对路径的File)
package day08.day08_2;import java.io.File;import java.io.IOException;public class demo10 { public static void main(String[] args) throws IOException { //创建单级文件夹 File file = new File("C:\\Users\\YIAN\\Desktop\\File"); //遍历文件目录 返回File数组 File[] files = file.listFiles(); for (File f:files ) { System.out.println(f); } /** * C:\Users\YIAN\Desktop\File\1.txt * C:\Users\YIAN\Desktop\File\directory * C:\Users\YIAN\Desktop\File\file1_1 * C:\Users\YIAN\Desktop\File\task.txt */ }}
注意:
1.list方法和listFiles方法遍历的是构造方法给出的目录
2.如果构造方法中给出的目录不存在,会抛出空指针异常
3.如果构造方法给出的路径不是一个目录,也会抛出空指针异常
转载地址:https://www.cnblogs.com/LeToGoing/p/14593910.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!