File类概述:文件和文件目录路径的抽象表达形式,与平台无关。
1.File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。
如果需要访问文件内容本身,则需要使用输入/输出流。
2.想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,
但是Java程序中的一个File对象, 可能没有一个真实存在的文件或目录。
3.File对象可以作为参数传递给流的构造器。
File类的构造方法:
1. pathName: 表示一个文件路径的字符串表示 "d:\\a.txt"
都可以是绝对路径名或相对路径名。
2.绝对路径名是完整的路径名,不需要任何其他信息,
就可以定位它所表示的文件,在unix: 以"/",在windows:以"盘符:\\"
1. 文件路径分隔符:和操作系统有关
在 UNIX 系统上,此字段为 ':';在 Microsoft Windows 系统上,它为 ';'。
windows f:\a.txt;f:\b.txt
2. 名称分隔符
在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\\'。
public class FileDemo { public static void main(String[] args) { //user.dir System.getProperty(String key) System.out.println(System.getProperty("user.dir")); //关于字符输出 \ System.out.println('\n'); System.out.println('\\'); //File (String pathname) 创建File类对象 File file = new File("d:\\a.txt"); //把文件路径分成了两部分:parent 文件或目录所在的父目录 // d:\b.txt => parenet: d:\ + b.txt //File (String parent, Sting child) File file1 = new File("d:\\", "b.txt"); //File (File parent, String child) File file2 = new File(new File("d:\\"), "b.txt"); //假设File类对象,文件目录已经确定 //有种特殊情况 File supplement = new File("\\test"); //E:\test System.out.println(supplement.getAbsolutePath()); } public static void testFile(File parent) { String fileName = "a.txt"; File file = new File(parent, fileName); } }
File类的成员方法:
创建功能:
public boolean createNewFile()
public boolean mkdir()
public boolean mkdirs()
当最后一级目录的父目录,不存在的时候,
mkdir创建失败, 但是mkdirs创建会成功
mkdir vs mkdirs
mkdir:当要创建的目录的父目录不存在的时候,
不会自动创建父目录,然后自动创建目标目录
mkdirs: 可以自动为目标目录创建不存在的父目录
public class FileCreateDemo { public static void main(String[] args) throws IOException { File file = new File("d:\\a.txt"); //public boolean createNewFile(); boolean newFile = file.createNewFile(); System.out.println("result = " + newFile); //在操作系统中,创建目录 //File file1 = new File("d:\\dir\\a"); //boolean mkdir = file1.mkdir(); //System.out.println("result = " + mkdir); // mkdirs File file2 = new File("d:\\dir\\a"); boolean mkdirs = file2.mkdirs(); System.out.println("result = " + mkdirs); } }
删除功能:
public boolean delete()
如果此路径名表示一个目录,则该目录必须为空才能删除。
public class FileDeleteDemo { public static void main(String[] args) { //File file = new File("d:\\a.txt"); //boolean delete = file.delete(); //System.out.println("result = " + delete); // 即使文件不存在,也不会抛出异常 //测试删除目录只能保证删除空目录 File dir = new File("d:\\dir"); boolean delete1 = dir.delete(); System.out.println("result = " + delete1); } }
public class FileRenameDemo { public static void main(String[] args) { File file = new File("d:\\a.txt"); //File rename = new File("d:\\aaa.txt"); // ////当目标File对象和我们的要改名的File,在同一目录下的时候,则简单的重命名 //boolean b = file.renameTo(rename); //System.out.println("result = " + b); //如果目标File对象和我们的要改名的File,不在同一目录下,还会实现一个文件移动的功能 File rename = new File("e:\\bbb.txt"); boolean b = file.renameTo(rename); System.out.println("result = " + b); } }
File类过滤器接口:
abstract boolean accept(File f) 此过滤器是否接受给定的文件。
当accept返回为true,满足过滤条件 accept方法返回false, 不满足过滤条件。
File[] listFiles(FileFilter filter) 用Filefileter对象,来指明一个对File的一个过滤条件。
ArrayList<File> files 就可以看成是一个可以动态扩容数组,放的是File类型的对象。
public class FileFilterDemo { public static void main(String[] args) { File dir = new File("d:\\dir"); filterTXT(dir); //File[] listFiles(FileFilter filter) FileFilter filter = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".txt"); } }; File[] files = dir.listFiles(filter); for (int i = 0; i < files.length; i++) { //System.out.println(files[i].getName()); } //ArrayList<File> files ArrayList<File> files1 = new ArrayList<>(); //通过add方法向,该可以自动扩容的“数组”中存放元素 files1.add(new File("test")); //输出的时候,输出方法会自动掉啊用每一个对象的toString()方法输出 //System.out.println(files1); } /* 获取执行目录下的 .txt文件信息 */ public static void filterTXT(File dir) { // 获取到指定目录下的所有的文件或者目录 File[] files = dir.listFiles(); //遍历所有的文件或者目录 for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { //当是文件的时候 String name = files[i].getName(); // a.txt // 如果要用split方法分割字符串,'.' String[] split = name.split("\\."); if ("txt".equals(split[split.length - 1])) { System.out.println(files[i]); } } } } }