3.IO
IO = input + output
主要针对系统中文件或目录进行相应的操作。
所有与io操作相关的类都位于java.io包下
3.1 File
- 文件和目录路径名的抽象表示
- 文件和目录可以通过File封装成一个对象
- 对于File而言,封装的并不是一个真正存在的文件,仅仅只是一个路径而已。他可以是存在的,也可以是不存在的。
3.1.1.构造方法
-
-
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的File
实例。File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的File
实例。File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的File
实例。
-
public static void main(String[] args) {
//创建File对象
//方式一:`File(String pathname)` 通过将给定的路径名字符串转换为抽象路径名来创建新的 `File`实例。
File f1 = new File("D:\\IO\\a.jpg");
System.out.println(f1);
//方式二 `File(String parent, String child)` 从父路径名字符串和子路径名字符串创建新的 `File`实例。
File f2 = new File("D:\\IO","a.jpg");
System.out.println(f2);
//方式三:`File(File parent, String child)` 从父抽象路径名和子路径名字符串创建新的 `File`实例。
File parent = new File("E:\\IO");
File f3 = new File(parent,"a.jpg");
System.out.println(f3);
}
3.1.2 File类的创建方法
-
-
boolean
createNewFile()
当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
-
-
-
boolean
mkdir()
创建由此抽象路径名命名的目录。boolean
mkdirs()
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
-
public static void main(String[] args) throws IOException {
//在D的IO目录下创建一个文件java.txt
File f1 = new File("D:\\IO\\java.txt");
boolean b = f1.createNewFile();
System.out.println(b);
// 在D盘的IO目录下下创建一个目录 JavaSE
System.out.println("---------------------------------");
File f2 = new File("D:/IO/JavaSE");
System.out.println(f2.mkdir());
System.out.println("---------------------------------");
// 在D盘的IO目录下创建一个多级目录 JavaWeb\HTML
//File.separator 根据操作系统自动判断使用那种路径分隔符
File f3 = new File("D:" + File.separator+"IO"+File.separator+"JavaWeb"+File.separator+"HTML");
System.out.println(f3);
System.out.println(f3.mkdirs());
}
3.1.3 File类的判断和获取功能
判断
-
-
boolean
exists()
测试此抽象路径名表示的文件或目录是否存在。
-
-
-
boolean
isAbsolute()
测试这个抽象路径名是否是绝对的。boolean
isDirectory()
测试此抽象路径名表示的文件是否为目录。boolean
isFile()
测试此抽象路径名表示的文件是否为普通文件。boolean
isHidden()
测试此抽象路径名命名的文件是否为隐藏文件。
-
获取
-
-
String
getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
-
-
-
String
getName()
返回由此抽象路径名表示的文件或目录的名称。String
getParent()
返回此抽象路径名的父null
的路径名字符串,如果此路径名未命名为父目录,则返回null。File
getParentFile()
返回此抽象路径名的父,或抽象路径名null
如果此路径名没有指定父目录。String
getPath()
将此抽象路径名转换为路径名字符串。
-
-
-
String[]
list()
返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。String[]
list(FilenameFilter filter)
返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。File[]
listFiles()
返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。File[]
listFiles(FileFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。File[]
listFiles(FilenameFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
-
public static void main(String[] args) {
// 创建File对象
File f1 = new File("D:\\IO\\Java.txt");
System.out.println(f1.isAbsolute());//测试是否是绝对路径表示 true
System.out.println(f1.isDirectory());//测试是否是目录 false
System.out.println(f1.isFile());//测试是否是文件 true
System.out.println(f1.exists());//判断该路径表示的File对象是否真实存在 true
System.out.println("------------------获取-----------------------");
System.out.println(f1.getAbsolutePath());//D:\IO\Java.txt
System.out.println(f1.getPath());//D:\IO\Java.txt
System.out.println(f1.getName());//Java.txt
System.out.println("-----------------------获取列表------------------------");
File f2 = new File("D:\\IO");
String[] strFiles = f2.list();
for(String str: strFiles){
System.out.println(str);
}
System.out.println("--------------------------------------");
File[] files = f2.listFiles();
for(File f : files){
System.out.println(f.getName());
}
}
3.1.4 File类的删除功能
-
-
boolean
delete()
删除由此抽象路径名表示的文件或目录。
-
public static void main(String[] args) {
File f1 = new File("D:\\IO\\Java.txt");
f1.delete();//true
File f2 = new File("D:\\IO\\JavaWeb");
f2.delete();//false
}
- 该删除功能只能删除文件或者空目录,如果目录不为空 则删除失败
- 使用该方法删除的文件和目录不会进入到回收站
3.2 绝对路径和相对路径
绝对路径: 完整的路径名,不需要任何的其他信息就可以直接定位到它所表示的文件或目录。在windowns系统中 ,都是一个盘符开头 linux系统下都是以"/"
相对路径: 必须使用取自其他领的信息进行解释,才能定位文件或目录。
File f3 = new File("dir");//相对当前工程所在的路径
System.out.println(f3.mkdirs());
File f4 = new File("day_12\\dir");
System.out.println(f4.mkdirs());
例子:遍历目录
需求: 给定一个路径(D:\IO)通过代码完成遍历该目录下的所有内容,并把所有的文件的绝对及路径输出在控制台
分析:
1 D:\\IO本身是一个目录 listFiles获取根目录下的所有文件和目录
2 依次对其中的目录文件进行输出
3 如果遇到目录 则执行1相同操作。 采用递归思想
public class FileDemo5 {
public static void main(String[] args) {
File srcFile = new File("D:\\IO");
//调用方法 递归
getAllFilePath(srcFile);
}
//定义一个方法 用于获取给定目录下的所有的文件及其目录的绝对路径
public static void getAllFilePath(File srcFile){
File[] files = srcFile.listFiles();
// 判断 是否可以得到目录数组
if(files != null){
//遍历该数组 得到每一个File对象
for (File file :files){
//判断该File表示的是目录还是文件
if(file.isDirectory()){
getAllFilePath(file);//递归
}else{
System.out.println(file.getAbsolutePath());
}
}
}
}
}
重命名
public class FileDemo6 {
/*
D:\IO\百家讲坛\001_百家讲坛【栏目宗旨为建构时代常识,享受智慧人生】_于丹_论语_孝敬之道.avi
D:\IO\百家讲坛\002_百家讲坛【栏目宗旨为建构时代常识,享受智慧人生】_于丹_论语_智慧之道.avi
D:\IO\百家讲坛\003_百家讲坛【栏目宗旨为建构时代常识,享受智慧人生】_于丹_论语_学习之道.avi
D:\IO\百家讲坛\004_百家讲坛【栏目宗旨为建构时代常识,享受智慧人生】_于丹_论语_诚信之道.avi
D:\IO\百家讲坛\005_百家讲坛【栏目宗旨为建构时代常识,享受智慧人生】_于丹_论语_知世之道.avi
D:\IO\百家讲坛\006_百家讲坛【栏目宗旨为建构时代常识,享受智慧人生】_于丹_论语_忠恕之道.avi
对以上文件进行重命名
*/
public static void main(String[] args) {
File file = new File("D:\\IO\\百家讲坛");
File[] files = file.listFiles();
System.out.println(files);
for (File f : files) {
String oldName = f.getName();
String newName = oldName.substring(0, oldName.indexOf("_")) + oldName.substring(oldName.lastIndexOf("_"));
//boolean renameTo(File dest)重命名由此抽象路径名表示的文件
File ff = new File(file,newName);
f.renameTo(ff);//将当前文件重命名到ff所表示的抽象路径
}
}
}
重命名还可以对文件进行移动