博客名称 |
---|
Java-(中级) |
文章目录
IO-File
java.io.File
我们要想实现IO的操作,就必须知道硬盘上文件的表现形式。
而Java就提供了一个类File供我们使用。
File:文件和目录(文件夹)路径名的抽象表示形式
File-构造方法
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
代码演示
public class FileDemo {
public static void main(String[] args) {
//File(String pathname):根据一个路径得到File对象
//把E:\Test\a.txt封装成File对象
File file1 = new File("E:\\Test\\a.txt");
System.out.println(file1);
System.out.println("-------------------");
//File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File file2 = new File("E:\\Test","a.txt");
System.out.println(file2);
System.out.println("-------------------");
//File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File file3 = new File("E:\\Test");
File file4 = new File(file3,"a.txt");
System.out.println(file4);
//以上三种方式效果是一样的
}
}
结果:
E:\Test\a.txt
-------------------
E:\Test\a.txt
-------------------
E:\Test\a.txt
File-创建功能
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了(创建文件夹成功放回true,否则false)注意:只能创建单个文件夹
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了(创建文件成功放回true,否则false)
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来(创建多个文件夹成功放回true,否则false)
代码演示
public class FileDemo {
public static void main(String[] args) throws IOException {
//需求1:在E盘创建一个aaa目录
File file = new File("E:\\aaa");
System.out.println("mkdir():"+file.mkdir());
//需求2:在E盘aaa目录插件a.txt文件
File file2 = new File("E:\\aaa\\a.txt");
System.out.println("createNewFile():"+file2.createNewFile());
//需求3:在E盘bbb目下创建b.txt文件
//File file3 = new File("E:\\bbb\\b.txt");
//注意:在某个文件夹下创建文件,这个文件夹首先要存在
//System.out.println("createNewFile():"+file3.createNewFile());//IOExceptio:系统找不到指定路径
//需求4:在E盘连续创建两个文件夹
File file4 = new File("E:\\ccc\\ddd");
//注意:在某个父文件夹创建子文件夹,这个父文件夹首先存在
System.out.println("mkdir():"+file4.mkdir());
//需求5:在E盘连续创建两个文件夹
File file5 = new File("E:\\eee\\fff");
System.out.println("mkdirs():"+file5.mkdirs());
}
}
File-删除功能
删除功能:public boolean delete()
注意:
A:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
B:Java中的删除不走回收站。
C:要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
代码演示
public class FileDemo {
public static void main(String[] args) throws IOException {
//注意:没指定盘符,默认是项目路径下
File file = new File("a.txt");
System.out.println(file.createNewFile());
//在项目路径下创建几个文件夹
File file2 = new File("aaa\\bbb\\ccc");
System.out.println(file2.mkdirs());
//删除功能:我要删除a.txt这个文件
File file3 = new File("a.txt");
System.out.println(file3.delete());
//删除功能:我要删除ccc这个文件夹
File file4= new File("aaa\\bbb\\ccc");
System.out.println(file4.delete());
//删除功能:我要删除aaa这个文件夹
//注意:不能删除有内容(文件(夹))的文件夹
File file5 = new File("aaa");
System.out.println(file.delete());
//要先删除文件夹中的内容
File file6 = new File("aaa\\bbb");
file6.delete();
File file7 = new File("aaa");
file7.delete();
}
}
File-重命名功能
重命名功能:public boolean renameTo(File dest)
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
路径以盘符开始:绝对路径 c:\a.txt
路径不以盘符开始:相对路径 a.txt
代码演示:
public class FileDemo {
public static void main(String[] args) {
//重命名功能:把林青霞.jpg重命名为东方不败.jpg
File file = new File("林青霞.jpg");
File file2 = new File("东方不败.jpg");
System.out.println("delete():" + file.renameTo(file2));
//重命名功能:把林青霞.jpg重命名为东方不败.jpg,并移动到E盘符下
File file3 = new File("林青霞.jpg");
File file4 = new File("E:\\东方不败.jpg");
System.out.println(file3.renameTo(file4));
}
}
File-判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
代码演示
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("a.txt");
file.createNewFile();
//public boolean isDirectory():判断是否是目录
System.out.println("isDirectory():"+file.isDirectory());//false
//public boolean isFile():判断是否是文件
System.out.println("isFile():"+file.isFile());//true
//public boolean exists():判断是否存在
System.out.println("extsts():"+file.exists());//true
//public boolean canRead():判断是否可读
System.out.println("canRead():"+file.canRead());//true
//public boolean canWrite():判断是否可写
System.out.println("canWrite():"+file.canWrite());//true
//public boolean isHidden():判断是否隐藏
System.out.println("isHidden():"+file.isHidden());//true
}
}
File-获取功能1
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
代码演示
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("b.txt");
file.createNewFile();
//public String getAbsolutePath():获取绝对路径
System.out.println("getAbsolutePath:" + file.getAbsolutePath());//D:\MyWorkSpace\basic-code\b.txt
//public String getPath():获取相对路径
System.out.println("getPath:" + file.getPath());//b.txt
//public String getName():获取名称
System.out.println("getName:" + file.getName());//b.txt
//public long length():获取长度。字节数
System.out.println("length:" + file.length());//0
//public long lastModified():获取最后一次的修改时间,毫秒值
long time = file.lastModified();
System.out.println("lastsModified:" + time);//1585045748128
//将long转为date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date(time);
String format = sdf.format(d);
System.out.println(format);
}
}
结果:
getAbsolutePath:D:\MyWorkSpace\basic-code\b.txt
getPath:b.txt
getName:b.txt
length:0
lastsModified:1585045748128
2020-03-24
File-获取功能2
public String[] list():获取指定目录下的所有文件或者文件夹(包括隐藏)的名称数组(下级目录的内容不能获取)
public File[] listFiles():获取指定目录下的所有文件或者文件夹(包括隐藏)的File数组(下级目录的内容不能获取)
**注意:**如果指定目录是一个空目录,返回[]。如果指定的是一个文件,返回就是null值。
举例:
目录aaa
目录bbb/b.txt(b.txt是文件)
File file1 = new File("aaa");
File[] files=file.listFiles;//[]
File file2 = new File("bbb\\b.txt");
File[] files=file2.listFiles;//null
代码演示
public class FileDemo {
public static void main(String[] args) {
//File file = new File("D:\\");
File file = new File("D:\\360安全浏览器下载");
//public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
String[] list = file.list();
for (String name : list) {
System.out.println(name);
}
System.out.println("------------------------");
//public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.getName());
}
}
}
结果:
abbyy%2520finereader%252012%2520PE%252012.0.101.264%25E8%25A1%25A5%25E4%25B8%2581.rar
Del_Lic_Serv.bat
FixFiles
Java各知识点详细总结.pdf
吃点饭.ssf
火影忍者.ssf
结婚吧!!.ssf
补丁使用说明.txt
------------------------
abbyy%2520finereader%252012%2520PE%252012.0.101.264%25E8%25A1%25A5%25E4%25B8%2581.rar
Del_Lic_Serv.bat
FixFiles
Java各知识点详细总结.pdf
吃点饭.ssf
火影忍者.ssf
结婚吧!!.ssf
补丁使用说明.txt
File-练习
需求1:过滤文件
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
分析:
1:把E盘封装成File对象
2.使用File对象获取E盘下所有的文件或文件夹
3.遍历File数组
判断是否是文件
是:在判断是否是以.jpg结尾
是:输出
不是:不搭理
不是:不搭理
代码演示
public class FileDemo {
public static void main(String[] args) {
//封装E盘
File file = new File("E:\\");
//获取E盘下所有文件或者文件夹File数组
File[] files = file.listFiles();
//遍历File数组
for (File f : files) {
//判断是否是文件
if (f.isFile()) {
//判断是否以.jpg结尾
if (f.getName().endsWith(".jpg")) {
System.out.println(f.getName());
}
}
}
}
}
结果:
东方不败.jpg
需求2:使用文件过滤器过滤文件
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
A:先获取所有的,然后遍历的时候,依次判断,如果满足条件就输出。
B:获取的时候就已经是满足条件的了,然后输出即可。(使用文件过滤器java.io.FilenameFilter(接口))
要想实现这个效果,就必须学习一个接口:文件名称过滤器
public String[] list(FilenameFilter filter):文件过滤器,返回的是过滤好的文件
public File[] listFiles(FilenameFilter filter):文件过滤器返回的是过滤好额文件对象
代码演示1
public String[] list(FilenameFilter filter)
public class FileDemo {
public static void main(String[] args) {
File file = new File("E:\\");
//返回的就是符合条件的文件了
String[] files = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//System.out.println(dir);
//System.out.println(name);
/*
File f = new File(dir,name);
boolean flag = f.isFile();
boolean flag2 = name.endsWith(".jpg");
return flag&&flag2;
*/
return new File(dir,name).isFile() && name.endsWith(".jpg");
}
});
for(String s:files){
System.out.println(s);
}
}
}
结果:
东方不败.jpg
代码演示2
public class FileDemo2 {
public static void main(String[] args) {
File file = new File("E:\\");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".jpg");
}
});
for (File f : files) {
System.out.println(f.getName());
}
}
}
结果:
东方不败.jpg
需求3:把E:\评书\三国演义下面的视频名称修改为00?_介绍.avi
代码演示
public class FileDemo03 {
public static void main(String[] args) {
//封装评书对象
File file = new File("E:\\评书\\三国演义");
//获取所有评书中的小说
File[] files = file.listFiles();
for (File f : files) {//三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi
//截取集数(这样写其实写死了,如果前面三国演义是变化的就不行了,所以不建议写死。)
//String number = f.getName().substring(5, 8);//001
//截取集数
int index = f.getName().indexOf("_");//获取第一给底杠索引
String number = f.getName().substring(index + 1, index + 4);
//截取_桃园三结义.avi
String content = f.getName().substring(f.getName().lastIndexOf("_"));//_桃园三结义.avi
String pingshu = number.concat(content);//001_桃园三结义.avi
System.out.println(pingshu);
//重命名
f.renameTo(new File(file, pingshu));
}
}
}
结果:
桃园三_桃园三结义.avi
十常之_十常之乱.avi
三英战_三英战吕布.avi
赤壁之_赤壁之战.avi
月下追_月下追貂蝉.avi