1.File类概述
我们要想实现IO的操作,就必须知道硬盘上文件的表现形式。而java就提供了一个File类来让我们使用。
File:文件或目录(文件夹)路径名的抽象表示形式。
2.File类的构造方法
File(String pathname) 根据一个路径得到File对象 File(String parent,String child) 根据一个目录和一个子文件/子目录得到一个File对象 File(File parent,String child) 根据父File对象和一个子文件/目录得到一个File对象
package cn; import java.io.File; public class FileDemo { public static void main(String[] args) { //File(String pathname):根据一个路径得到一个File对象 //把E:/demo/a.txt封装成一个对象 File file = new File("e:/demo/a.txt"); //File(String parent,String child):根据一个目录和一个子文件/目录得到File对象 File file2 = new File("e:/demo","a.txt"); //File(File parent,String child):根据一个父File对象和一个子文件/目录得到File对象 File file3 = new File("e:/demo"); File file4 = new File(file3,"a.txt"); } }
3.File的成员方法
创建功能
package cn; import java.io.File; import java.io.IOException; /** * File类的创建功能 * public boolean createNewFile() 创建文件 * public boolean mkdir() 创建文件夹,如果存在这样的文件夹就不创建 只能创建一层文件夹 * public boolean mkdirs() 创建文件夹,可以创建多层文件夹 */ public class FileDemo { public static void main(String[] args) throws Exception { //在e盘目录下创建一个文件夹demo File file = new File("e:/demo"); System.out.println("创建文件夹:"+file.mkdir()); //在e盘目录demo下创建一个文件a.txt File file1 = new File("e:/demo/a.txt"); System.out.println(file1.createNewFile()); //在e盘目录test/aaa下创建a.txt文件 File file2 = new File("e:/text/aaa"); System.out.println(file2.mkdirs()); } }
删除功能
package cn; import java.io.File; /** * File类的删除功能 * public boolean delete() 删除文件或文件夹 * * 注意: * 如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。 * java的删除不经过回收站 * 要删除一个文件夹,该文件夹内不能包括文件或文件夹 * */ public class FileDemo2 { public static void main(String[] args) { File file = new File("e:/demo/a.txt"); System.out.println(file.delete()); File file2 = new File("E:/text/aaa"); System.out.println(file2.delete()); } }
重命名功能
public boolean renameTo(File dest) 重新命名此抽象路径名的文件
package cn; import java.io.File; import java.io.IOException; /** * 重命名功能 public boolean renameTo(File dest) * 如果路径名相同,就是改名 * 如果路径名不同,就是改名+剪切 * * 路径以盘符开始:绝对路径 * 路径不以盘符开始:相对路径 */ public class FileDemo3 { public static void main(String[] args) throws IOException { //重命名之前的File对象 File file = new File("e:/text/a.txt"); //要重命名的File对象 File newFile = new File("e:/text/hello.txt"); //重命名 System.out.println(file.renameTo(newFile)); File file2 = new File("a.txt"); file2.createNewFile(); //File newFile2 = new File("e:/hello.txt"); //file2.renameTo(newFile2); } }
判断功能
public boolean isDirectory() 判断是否为目录 public boolean isFile() 判断是否为文件 public boolean exists() 判断是否存在 public boolean canRead() 判断是否可读 public boolean canWrite() 判断是否可写 public boolean isHidden() 判断是否隐藏
package cn; import java.io.File; public class FileDemo4 { public static void main(String[] args) throws Exception { File file = new File("hello.txt"); file.createNewFile(); System.out.println(file.isDirectory());//false System.out.println(file.isFile());//true System.out.println(file.exists());//true System.out.println(file.canRead());//true System.out.println(file.canWrite());//true System.out.println(file.isHidden());//false } }
基本获取功能
public String getAbsolutePath() 获取绝对路径 public String getPath() 获取相对路径 public String getName() 获取文件名 public long length() 获取长度 public long lastModified() 获取最后一次的修改时间,返回的是毫秒值
package cn; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class FileDemo5 { public static void main(String[] args) { File file = new File("a.txt"); System.out.println(file.getAbsolutePath());//D:\MyEclipse2016\workspace\JavaSE\a.txt System.out.println(file.getPath());//a.txt System.out.println(file.getName());//a.txt System.out.println(file.length());//0 System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(new Date(file.lastModified())));//2016-10-23 } }
高级获取功能
public String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的额文件和目录 public File[] listFiles() 获取指定目录下的所有文件或者文件夹的File数组
package cn; import java.io.File; public class FileDemo6 { public static void main(String[] args) { File file = new File("e:/"); String[] list = file.list(); for(String str:list){ System.out.println(str); } System.out.println("------------"); File[] files = file.listFiles(); for(File f:files){ System.out.println(f.getName()+":"+f.length()); } } }
4.练习
解法一:
先获取所有的,然后遍历的时候,依次判断,如果满足条件就输出。
package cn; import java.io.File; /** * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,则输出此文件名称 * 分析: * 1.封装e盘目录 * 2.获取该目录下的所有文件或者文件夹的File数组 * 3.遍历File数组,获取每一个File对象,然后判断 * 4.是否为文件 * 是:继续判断是否以.jpg结尾 * 是:输出此文件名称 * 否:随它去吧 * 否:随它去吧 * */ public class FileTest { public static void main(String[] args) { File file = new File("e:/"); File[] fs = file.listFiles(); for(File f:fs){ if(f.isFile()){ if(f.getName().endsWith(".jpg")){ System.out.println(f); } } } } }
解法二:
获取的时候就已经满足条件的了,然后输出即可。
package cn; /** * 文件名称过滤器 */ import java.io.File; import java.io.FilenameFilter; public class FileTest2 { public static void main(String[] args) { File file = new File("e:/"); File[] fs = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { File f = new File(dir,name); if(f.isFile()){//判断是否为文件 if(f.getName().endsWith(".jpg")){//判断后缀名是否为.jpg return true; } } return false; } }); for(File f :fs){ System.out.println(f.getName()); } } }
简化代码
package cn; /** * 文件名称过滤器 */ import java.io.File; import java.io.FilenameFilter; public class FileTest2 { public static void main(String[] args) { File file = new File("e:/"); File[] fs = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return new File(dir,name).isFile() && name.endsWith(".jpg"); } }); for(File f :fs){ System.out.println(f.getName()); } } }