File
(1)File是文件和目录路径名的抽象表示。IO流操作中大部分都是对文件的操作,因此Java就提供了File类供我们来操作文件。
(2)构造方法
根据一个路径得到一个File对象
A:File file = new File("e:\demo\a.txt");
根据一个目录和一个子文件/目录得到File对象
B:File file = new File("e:\demo","a.txt");
根据一个父File对象和一个子文件/目录得到一个File对象
C:File file = new File("e:\demo");
File file2 = new File(file,"a.txt");
public static void main(String[] args) { File file = new File("E:\demo\a.txt"); File file2 = new File("E:\demo", "a.txt"); File file3 = new File("e:\demo"); File file4 = new File(file3, "a.txt"); }
(3)File类的功能
A:创建功能
public boolean createNewFile() 创建文件 如果存在就不创建了
public boolean mkdir() 创建文件夹 如果存在这样的文件夹就不创建了
public boolean mkdirs() 创建文件夹 如果父文件夹不存在,会帮您创建出来
1 public class FileDemo1 { 2 public static void main(String[] args) throws IOException { 3 File file = new File("e:\demo"); 4 System.out.println("mkdir:" + file.mkdir()); 5 6 File file2 = new File("e:\demo\a.txt"); 7 System.out.println("ceateNewFile:" + file2.createNewFile()); 8 9 File file3 = new File("e:\aaa\bbb\ccc\dddd"); 10 System.out.println("mkdir:" + file3.mkdirs()); 11 } 12 13 }
B:删除功能
public boolean delete()
注意:如果创建文件或文件夹没有指定盘符路径,默认在项目路径下
Java中的删除不走回收站的哦
要删除一个文件夹,这是这个文件夹下面不能包含文件或文件夹
1 public class FileDemo2 { 2 public static void main(String[] args) throws IOException { 3 File file = new File("a.txt"); 4 System.out.println("createNewFile:" + file.createNewFile()); 5 6 File file2 = new File("aaa\bbb\ccc"); 7 System.out.println("mkdirs:" + file2.mkdirs()); 8 9 System.out.println("delete:" + file.delete()); 10 //删除ccc文件夹 11 System.out.println("delete:" + file2.delete()); 12 13 //删除aaa文件夹 14 File file3 = new File("aaa\bbb"); 15 File file4 = new File("aaa"); 16 System.out.println("delete:" + file3.delete()); 17 System.out.println("delete:" + file4.delete()); 18 19 } 20 21 22 }
C:重命名功能
pulbic boolean renameTo(File desc)
1 public class FileDemo3 { 2 public static void main(String[] args) { 3 //先创建一个文件对象 4 File file = new File("aaa.jpg"); 5 6 //修改成“bbb.jpg” 7 File newfile = new File("bbb.jpg"); 8 9 System.out.println("renameTo:" + file.renameTo(newfile)); 10 } 11 12 }
D:判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
1 public class FileDemo4 { 2 3 public static void main(String[] args) { 4 File file = new File("a.txt"); 5 6 System.out.println("isDirectory:" + file.isDirectory()); 7 System.out.println("idFile:" + file.isFile()); 8 System.out.println("exists:" + file.exists()); 9 System.out.println("canRead:" + file.canRead()); 10 System.out.println("canWrite:" + file.canWrite()); 11 System.out.println("isHidden:" + file.isHidden()); 12 13 14 } 15 }
E:获取功能
* public String getAbsolutePath() :获取绝对路径
* public String getPath() :获取相对路径
* public String getName() :获取名称
* public long length() :获取字节数
* public long lastModifiled() :获取最后一次修改时间
1 public class FileDemo5 { 2 /** 3 * public String getAbsolutePath() :获取绝对路径 4 * public String getPath() :获取相对路径 5 * public String getName() :获取名称 6 * public long length() :获取字节数 7 * public long lastModifiled() :获取最后一次修改时间 8 */ 9 10 public static void main(String[] args) { 11 12 File file = new File("demo\a.txt"); 13 14 System.out.println("getAbsolutePath:" + file.getAbsolutePath()); 15 System.out.println("getPath:" + file.getPath()); 16 System.out.println("getName:" + file.getName()); 17 System.out.println("length:" + file.length()); 18 System.out.println("lastModifiled:" + file.lastModified()); 19 20 //打印出的时间 1416481977031 转化成年月 21 Date d = new Date(1416481977031L); 22 SimpleDateFormat sdt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 23 String s = sdt.format(d); 24 System.out.println(s); 25 } 26 27 }
F:高级获取功能
public String[] list():获取指定目录下的所有文件或者文件夹名称数组
public File[] listFile():获取指定目录下的所有文件或者文件夹的File数组
这种方法可以对拿到的File文件可以进一步做其他操作,如获取路径等
1 public class FileDemo6 { 2 public static void main(String[] args) { 3 File file = new File("e:\"); 4 5 //public String[] list():获取指定目录下的所有文件或者文件夹名称数组 6 String[] strArray = file.list(); 7 for(String s : strArray){ 8 System.out.println(s); 9 } 10 11 System.out.println("***********************"); 12 13 //public File[] listFile():获取指定目录下的所有文件或者文件夹的File数组 14 //这种方法可以对拿到的File文件做其他操作 如获取路径等 15 File[] fileArray = file.listFiles(); 16 for(File f : fileArray){ 17 System.out.println(f.getName()); 18 } 19 20 } 21 22 }
G:过滤器功能
A:输出指定目录下指定后缀名的文件名称
a:先获取所有的,在遍历的时候判断,再输出
b:先判断,再获取,最后直接遍历输出即可
判断E盘目录下是否含有后缀名为.jpg的文件,如果有就输出文件名称
a:先获取所有的,在遍历的时候判断,再输出
1 /** 2 * 判断E盘目录下是否含有后缀名为.jpg的文件,如果有就输出文件名称 3 * 4 * 封装E盘目录 5 * 获取该目录下所有的文件或者文件夹的File数组 6 * 遍历该File数组得到每一个File对象,然后判断 7 * 是否是文件 8 * 是 再判断是否以.jpg结尾 9 * 是 输出该文件名称 10 * 否 不用管 11 * @author Administrator 12 * 13 */ 14 public class FileDemo7 { 15 public static void main(String[] args) { 16 //封装E盘目录 17 File file = new File("e:\"); 18 //获取该目录下所有的文件或者文件夹的File数组 19 File[] fileArray = file.listFiles(); 20 //遍历该File数组得到每一个File对象,然后判断 21 for(File f : fileArray){ 22 //是否是文件 23 if(f.isFile()){ 24 //是否以.jpg结尾 25 if(f.getName().endsWith(".jpg")){ 26 //输出该文件名称 27 System.out.println(f.getName()); 28 } 29 30 } 31 } 32 } 33 34 }
b:先判断,再获取,最后直接遍历输出即可 采用过滤器改进版本,在放入数组时就判断了,后直接输出
1 public class FileDemo8 { 2 public static void main(String[] args) { 3 File file = new File("e:\"); 4 5 String[] strArray = file.list(new FilenameFilter() { 6 7 @Override 8 public boolean accept(File dir, String name) { 9 10 return new File(dir, name).isFile() && name.endsWith(".jpg"); 11 } 12 }); 13 14 for(String s : strArray){ 15 System.out.println(s); 16 } 17 } 18 19 }
案例批量修改文件名称
E:评书三国演义三国演义_001_[评书网-今天很高兴]_桃园三结义.avi
改成 E:评书三国演义 01_桃园三结义.avi
1 /** 2 * 批量修改文件名称 3 * 4 * 思路: 5 * 封装目录 6 * 获取该目录下所有的文件的File数组 7 * 遍历该File数组,得到每一个File对象 8 * 拼接一个新的名称 9 * @author Administrator 10 * 11 */ 12 public class FileDemo9 { 13 public static void main(String[] args) { 14 //封装目录 15 File srcFolder = new File("E:\评书\三国演义"); 16 17 //获取该目录下所有的文件的File数组 18 File[] fileArray = srcFolder.listFiles(); 19 20 //遍历该File数组,得到每一个File对象 21 for(File file : fileArray){ 22 //E:评书三国演义三国演义_001_[评书网-今天很高兴]_桃园三结义.avi 23 //改后: E:评书三国演义 01_桃园三结义.avi 24 25 String name = file.getName();//得到 三国演义_001_[评书网-今天很高兴]_桃园三结义.avi 26 27 int index = name.indexOf("_"); 28 String numberString = name.substring(index + 1, index + 4);//包左不包右 右边要多一个 29 30 int endindex = name.lastIndexOf('_'); 31 String nameString = name.substring(endindex); 32 33 //拼接 34 String newName = numberString.concat(nameString);//001_桃园三结义.avi 35 36 File newFile = new File(srcFolder, newName);//E:\评书\三国演义\001_桃园三结义.avi 37 //重命名 38 file.renameTo(newFile); 39 40 } 41 } 42 43 }