File(文件对象)
IO流意味着输入输出,就是磁盘文件、内存等其他与程序进行交互(读数据,写数据)
常见的如记事本的保存功能:
点击保存就是将字符写到文件中永久保存
开发中常见的就是将日志文件保存
File介绍
java中的File类描述的是计算机中的文件和文件夹
而不只是文件
- 构造方法
public File(File parent,String child) //文件的抽象路径名(文件的路径+文件名)
public File(String pathname)
public File(String parent,String child) // parent + child 就是上面的pathname
创建File对象
以下只是抽象路径的描述,而不是真的在磁盘上创建了一个文件或者文件夹
File file1 = new File("C:/test.txt"); //不代表的文件
File file2 = new File("C:/xx"); //此处不代表是文件夹
创建文件
这里是真正的在计算机上创建了一个文件
用到的方法 :public boolean createNewFile()throws IOException
Code:
File file1 = new File("C:/test.txt");
file1.createNewFile(); //这里表示在C盘创建了一个test.txt的文件
File file = new File("C:/xx");
file.createNewFile(); //在C盘下创建了一个xx的文件,注意:这里不是文件夹,还是文件,只是没有后缀名而已
注意事项:
1.需要File对象调用:根据File对象中的pathname来创建文件
2.如果文件已经存在,返回false
3.如果文件路径不存在,抛出IO异常
4.此方法只能够创建文件,不会创建文件夹
创建文件夹
这里是真正的在计算机上创建了一个文件
用到的方法 :
1.public boolean mkdir() //创建目录,但是不能创建父路径
2.public boolean mkdirs() //会创建父路径
具体见代码
Code:
File file1 = new File("C:/a");
file1.mkdir(); //这里表示在C盘创建了一个a的文件夹
File file = new File("C:/xx/oo");
file.mkdir(); //此处会报错,因为c盘中没有xx的目录(就是上面说的父路径)
File file = new File("C:/xx/oo");
file.mkdirs(); //创建成功,会在C盘创建xx, xx下面创建oo
删除文件
不管文件夹还是文件,都可以调用此方法删除
**Method:**
public boolean delete()
注意事项:
1.需要File对象来调用(把File对象所关联的文件从磁盘上面删除)
2.如果是删除文件夹,必须是空文件夹
3.文件就直接删除
4.希望 : 有一个方法可以直接删除文件和文件夹(包括子文件夹和文件的)
直接删除文件和文件夹(包括子文件夹和文件的)
递归删除
/**
* 删除当前目录及其下面的目录和文件
* @param file 删除承成功返回true,
* 如果file==null,返回false,如果file不存在,返回false
*/
public static boolean deleteAll(File file) {
//判断文件是否为null
if (file == null)
return false;
if (!file.exists())
return false;
if (file.isFile())
file.delete();
if (file.isDirectory()) {
//得到文件夹所有的文件
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
deleteAll(file2);
}
}
return file.delete();
}
File基本方法及应用
public boolean isDirectory() //判断是否是一个目录
public boolean isFile() //判断是否是一个文件
public boolean exists() //测试此抽象路径名表示的文件或目录是否存在
public static File[] listRoots() // 列出可用的文件系统根(操作系统上面的盘符)
作用: 先判断电脑上有哪些盘符,然后在制定的位置创建文件夹或者文件
public String[] list() //返回当前的文件夹对象下面一层的所有的文件(文件夹)的名字
public File[] listFiles() //返回当前的文件夹对象下面一层的所有的文件(文件夹)(File对象的形式)
其他请查API
Code:
public static void main(String[] args) {
File file = new File("C:\\Users\\maple\\Desktop\\itsourcejava\\xx\\oo");
List<File> fileFilter = fileFilter(file, "txt");
System.out.println(fileFilter);
}
/**
* 返回当前目录下过滤后的文件
* @param file 抽象路径
* @param suffix 后缀名(什么格式的)
*/
public static List<File> fileFilter(File file, String suffix) {
if (file == null)
return null;
if (!file.exists())
return null;
// *1.获取到当前目录下的所有file对象
File[] listFiles = file.listFiles();
//获取到的有可能为null
if (listFiles == null)
return null;
//如果不是null
//判断是否是空目录
if (listFiles.length <= 0)
return null;
List<File> list = new ArrayList<>();
// *2.判断是不是文件,文件才有后缀名
for (File fi : listFiles) {
if (fi.isFile()) {
// *3.判断是不是以suffix结尾的,如果是加入到集合中
if (fi.getName().endsWith("."+suffix))
list.add(fi);
}
}
return list;
}
列出隐藏文件
/**
* 列出所有隐藏文件
* @param file 抽象路径
*/
public static List<File> listHiddenFiles(File file) {
if (file == null)
return null;
if (!file.exists())
return null;
//*1.获取到当前目录下的所有file对象
File[] listFiles = file.listFiles();
//获取到的有可能为null
if (listFiles == null)
return null;
//如果不是null
//判断是否是空目录
if (listFiles.length <= 0)
return null;
List<File> list = new ArrayList<>();
// *2.判断是不是文件
for (File fi : listFiles) {
if (fi.isFile()) {
// *3.判断是否是隐藏文件
if (fi.isHidden()) {
list.add(fi);
}
}
}
return list;
}
文件名和文件过滤器
调用的时候指定具体的过滤器来得到我们想要的一个目录下面的东西
过滤器的接口(FilenameFilter, FileFilter)
具体实现需要自己继承接口覆写方法
**Method:**
String[] list(FilenameFilter filter)
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)
**Code:**
我这里采用的是匿名内部类,就没有再写一个类去实现了
public static void main(String[] args) {
File file = new File("C:\\Users\\maple\\Desktop\\itsourcejava\\xx\\oo");
//返回所有过滤的文件名
String[] list = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//判断文件名是否是以.txt结尾的
return name.endsWith(".txt");
}
});
System.out.println(Arrays.toString(list));
}