IO流1--对硬盘文件的操作
* File:因为数据在硬盘上最常见的方式,就是文件。而文件本身有很多的属性,比如说:文件大小,是否可读啊,是否隐藏啊。
*那么,java为了方便我们 对文件进行操作,就提供了File类供我们使用。
*
* 看API学习File类。
*
* File既可以表示文件,也可以表示文件夹。(目录)
一、File文件指定文件路径
* 构造方法:
* File(String pathname):根据指定的路径创建File对象。
* File(String parent, String child):根据指定的父文件夹和子文件或者文件夹创建File对象
* File(File parent, String child):根据指定的父文件夹对象和子文件或者文件夹创建File对象
public class FileDemo {
public static void main(String[] args) {
// 方式1
File file = new File("d:\\a.txt");
File file2 = new File("d:\\aaa");
// 方式2
File file3 = new File("d:\\", "a.txt");
File file4 = new File("d:\\", "aaa");
// 方式3
File file5 = new File("d:\\");
File file6 = new File(file5, "a.txt");
File file7 = new File(file5, "aaa");
}
}
二、File创建文件和文件夹。
创建功能:
* 创建文件:public boolean createNewFile()
* 如果指定的文件不存在,就创建。如果存在,就不创建。
* 创建文件夹:public boolean mkdir()
* 创建指定的目录,如果存在,就不创建。
* public boolean mkdirs()
* 创建指定的目录,如果存储,就不创建。这个时候,如果父目录不存在,它也会自动创建。
<pre class="java" name="code">public class FileDemo {
public static void main(String[] args) throws IOException {
// 创建文件
File file = new File("d:\\a.txt");
System.out.println("createNewFile:" + file.createNewFile());
// 创建文件 忘了写路径名称了,以当前项目路径所在路径为父目录
File file2 = new File("a.txt");
System.out.println("createNewFile:" + file2.createNewFile());
// 创建目录
File file3 = new File("aaa");
System.out.println("mkdir:" + file3.mkdir());
// 创建多级目录 如果想创建一个指定的目录或者文件,要求,父目录必须存在。
// File file4 = new File("bbb\\ccc");
// System.out.println("mkdir:" + file4.mkdir());
// 解决方案:
// File file5 = new File("bbb");
// File file6 = new File(file5, "ccc");
// System.out.println("mkdir:" + file5.mkdir());
// System.out.println("mkdir:" + file6.mkdir());
// 如果目录过多,这样做就太麻烦。肿么办呢?
File file4 = new File("bbb\\ccc");
System.out.println("mkdirs:" + file4.mkdirs());
// 创建文件
File file5 = new File("b.txt");
System.out.println("mkdir:" + file5.mkdir());
}
}
三、File删除文件文件夹。
* 删除功能:
* public boolean delete():既可以删除文件,也可以删除文件夹。取决于你使用的对象。
*
* 注意:
* A:如果你删除的目录下还有内容,那么,必须先把所有内容删除完毕后,在删除目录。
* B:java语言的删除不走回收站。
public class FileDemo {
public static void main(String[] args) {
// 需求:我要删除a.txt
File file = new File("a.txt");
System.out.println("delete:" + file.delete());
// 需求:我要删除aaa
File file2 = new File("aaa");
System.out.println("delete:" + file2.delete());
// 需求:我要删除bbb
File file3 = new File("bbb");
System.out.println("delete:" + file3.delete());
}
}
四、File的判断功能
* 判断功能
* boolean exists():判断file对象是否存在
* boolean isFile():判断file对象是否是文件
* boolean isDirectory():判断file对象是否是文件夹
* boolean isAbsolute():判断file对象是否是绝对路径
* boolean canRead():判断file对象是否可读
* boolean canWrite():判断file对象是否可写
* boolean isHidden():判断file对象是否隐藏
public class FileDemo {
public static void main(String[] args) {
File file = new File("a.txt");
System.out.println("exists:" + file.exists());// true
System.out.println("isFile:" + file.isFile());// true
System.out.println("isDirectory:" + file.isDirectory());// false
System.out.println("isAbsolute:" + file.isAbsolute());// false
System.out.println("canRead:" + file.canRead());// true
System.out.println("canWrite:" + file.canWrite());// true
System.out.println("isHidden:" + file.isHidden());// false
}
}
五、File的获取功能
* 获取功能:
* String getAbsolutePath():绝对路径
* String getPath():相对路径
* String getName():文件名称
* long length():文件大小,单位是字节
* long lastModified():上次修改时间的毫秒值。
* public static File[] listRoots():列出可用的系统文件根目录
* public String[] list():返回的是指定目录下所有文件或者文件夹的名称数组
* public File[] listFiles():返回的是指定目录下所有文件或者文件夹对象数组
public class FileDemo {
public static void main(String[] args) {
// 需求:指向文件
File file = new File("bbb\\ccc\\a.txt");
System.out.println("getAbsolutePath:" + file.getAbsolutePath());
System.out.println("getPath:" + file.getPath());
System.out.println("getName:" + file.getName());
System.out.println("length:" + file.length());
System.out.println("lastModified:" + file.lastModified());
File[] fileArray = file.listFiles();
for (File f : fileArray) {
System.out.println(f.getName());
Date d = new Date(file.lastModified());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d));
}
}
* 获取指定目录下指定后缀的文件名称:
* A:先获取指定目录下所有文件或者文件夹的File数组,然后再遍历的时候进行判断。满足条件的就输出该File的名称。
* B:直接获取指定目录下满足条件的String(File)数组。然后遍历数组即可。
*
* 文件名称过滤器:FilenameFilter
* public String[] list(FilenameFilter filter)
public class FileDemo {
public static void main(String[] args) {
// 封装目录
File file = new File("d:\\");
// 获取满足条件的数组
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// 判断是否是文件,是否是以.mp4结尾
// System.out.println(dir + "---" + name);
File file = new File(dir, name); // d:\我的文档
boolean flag = file.isFile();
boolean flag2 = name.endsWith(".mp4");
return flag && flag2;
}
});
// 遍历字符串数组
for (String str : strArray) {
System.out.println(str);
}
}
}