IO流01
File
1)概述
要学习IO流,就必须掌握硬盘上的路径形式
Java提供了一个File类
文件和目录路径名的抽象表示形式
2)构造方法
public File(String pathname):将该路径名称封装成了一个File实例
File(String parent, String child):将父文件夹或者目录里面的child文件封装成一个File实例(不常用)
FIle(File parent, String child):参数一:表示封装了File对象,该文件夹下的文件
import java.io.File; public class Demo01 { public static void main(String[] args) { // 需求:封装e盘下的demo文件下面的a.txt文件:抽象表示 File file1 = 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)成员方法
public boolean createNewFile():表示创建文件,如果该文件存在,就不需要创建
public boolean mkdir():创建文件夹/目录,如果存在,就不需要创建
public boolean mkdirs():创建文件夹/目录,如果存在,就不需要创建(常用)
import java.io.File; import java.io.IOException; public class Demo02 { public static void main(String[] args) { // 需求:在e盘下创建一个demo文件夹 File file1 = new File("E:\\demo"); // 如果没有,创建并返回true;如果文件夹存在,不用创建,返回false System.out.println("mkdir:" + file1.mkdir()); // 需求:在e盘下demo文件夹下创建a.txt文件 File file2 = new File("E:\\demo\\a.txt"); try { // 如果没有,创建并返回true;如果文件存在,不用创建,返回false System.out.println("createNewFile:" + file2.createNewFile()); } catch (IOException e) {// IOException:编译时期异常 e.printStackTrace(); } // 需求:在e盘下test文件夹下创建a.txt文件 File file3 = new File("E:\\test\\a.txt"); try { // 异常:系统找不到指定的路径。在E盘下找不到这个test System.out.println("createNewFile:" + file3.createNewFile()); } catch (IOException e) { e.printStackTrace(); } // 创建文件夹/目录,如果不存在该目录,就创建!返回true File file4 = new File("e:\\test\\aaa\\bbb\\ccc\\ddd"); System.out.println("mkdirs:" + file4.mkdirs()); } }
如果我们在写路径的时候,没有带盘符,那么默认是在你当前项目路径下!
import java.io.File; import java.io.IOException; public class Demo04 { public static void main(String[] args) { // 如果我们在写路径的时候,没有带盘符,那么默认是在你当前工程项目路径下! // 运行完刷新下工程 File file1 = new File("a.txt"); try { System.out.println("createNewFile:" + file1.createNewFile()); } catch (IOException e) { e.printStackTrace(); } File file2 = new File("aaa\\bbb\\ccc\\ddd"); System.out.println("mkdirs:" + file2.mkdirs()); } }
刷新下工程
public boolean delete():删除此抽象路径名表示的文件或目录
import java.io.File; public class Demo05 { public static void main(String[] args) { // 需求:删除aaa这个目录 File file1 = new File("aaa\\bbb\\ccc\\ddd"); // 不能删除带有内容的文件,只能逐个删除 System.out.println("delete:" + file1.delete()); File file2 = new File("aaa\\bbb\\ccc"); System.out.println("delete:" + file2.delete()); } }
注意:java中的删除不走回收站;
delete不能删除该文件夹下有文件或者是文件夹的文件,只能删除空文件夹
public boolean renameTo(File dest):重命名
两个文件的路径一致的情况下:只是改名字
两个文件的路径不一致的情况下:不但改名,并且剪切(当前的盘符路径下)
import java.io.File; public class Demo06 { public static void main(String[] args) { File file1 = new File("a.txt"); File file2 = new File("b.txt"); // 只该名称 System.out.println("renameTo:" + file1.renameTo(file2)); File file3 = new File("E:\\c.txt"); // 改名并剪切到E:\\目录下 System.out.println("renameTo:" + file2.renameTo(file3)); } }
4)判断功能
public boolean isAbsolute:判断该路径是否是绝对路径(带盘符)
public boolean isFile():判断此文件是否为一个标准文件
public boolean isHidden():判断此抽象路径表示的文件是否是一个隐藏文件
public boolean canRean():可读
public boolean canWrite():可写
import java.io.File; public class Demo07 { public static void main(String[] args) { File file = new File("a.txt");// 相对路径(在工程目录下) System.out.println("isAbsolute:" + file.isAbsolute());// false System.out.println("isFile:" + file.isFile());// true System.out.println("isHidden:" + file.isHidden());// false System.out.println("canRead:" + file.canRead());// true System.out.println("canWrite:" + file.canWrite());// true } }
5)获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取文件或者目录的名称
public long length():获取文件的长度
public long lastModified():返回次抽象路径文件最后一次被修改的时间,返回的修改时间的一个毫秒值
import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class Demo03 { public static void main(String[] args) { File file1 = new File("a.txt");// "\\" 代表"\" System.out.println("getAbsolutePath:" + file1.getAbsolutePath()); // getAbsolutePath:F:\JAVA\JavaSE\a.txt System.out.println("getPath:" + file1.getPath());// getPath:a.txt System.out.println("getName:" + file1.getName());// getName:a.txt // 没写数据,长度为0 System.out.println("length:" + file1.length());// length:0 // 最后一次修改的毫秒值 System.out.println("lastModified:" + file1.lastModified());// lastModified:1502333228415 // 转化为时间 Date d = new Date(1502333228415L);// long类型要加L SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = sdf.format(d); System.out.println(s);// 2017-08-10 10:47:08 } }
6)高级功能
public String[] list():获取制定盘符下的所有文件以及文件夹的名称数组
import java.io.File; public class Demo08 { public static void main(String[] args) { // 需求:要获取e盘下所有的文件以及文件夹名称 // 将e盘的路径表现形式封装成一个File对象 File file = new File("E:\\"); String[] str = file.list(); //遍历 for (String s : str) { System.out.println(s); } } }
public File[] listFiles():获取指定盘符下的所有文件以及文件夹的File对象数组(常用)
import java.io.File; public class Demo09 { public static void main(String[] args) { // 需求:要获取e盘下所有的文件以及文件夹名称 // 将e盘的路径表现形式封装成一个File对象 File file = new File("E:\\"); // 文件对象数组 File[] fileArr = file.listFiles(); // 是对象就要非空判断 if (fileArr != null) { for (File f : fileArr) { // 直接输出f为全路径名称 System.out.println(f.getName()); } } } }
7)练习
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
分析
a.将e盘封装成一个File对象
b.获取当前盘符下的所有的文件夹以及文件的File数组listFiles()
c.遍历之前,给File数组对象做一个非空判断,使用增强for遍历
d.获取到每一个文件以及文件夹
判断
是否是文件:isFile()
是
是否是以.jpg结尾的后缀名的文件,endWith(".jpg")
否:不搭理
e.输出就可以
import java.io.File; public class Demo10 { public static void main(String[] args) { File file = new File("E:\\"); File[] fileArray = file.listFiles(); // 非空判断 if (fileArray != null) { // 遍历 for (File f : fileArray) { // 判断是否是文件 if (f.isFile()) { // 判断是否以.jpg结尾 if (f.getName().endsWith(".jpg")) { System.out.println(f.getName()); } } } } } }
8)文件过滤器
上一题中:当我们获取的时候,就已经有结果
要想实现这样一样结果,就必须学习一个接口:FilenameFileter
public File[] listFiles(FileFilter filter)
public String[] list(FilenameFiter fiter):(这个常用)
形式参数如果是一个接口对象:其实需要传递的是子实现类对象/匿名内部类
import java.io.File; import java.io.FilenameFilter; public class Demo11 { public static void main(String[] args) { File file = new File("E:\\"); String[] strArray = file.list(new FilenameFilter() { @Override //File dir: 指定的文件 //name: 文件名称列表 public boolean accept(File dir, String name) { // File f = new File(dir, name); // // 是否是文件 // boolean flag1 = f.isFile(); // // 是否以.jpg结尾 // boolean flag2 = name.endsWith(".jpg"); // return flag1 && flag2; //匿名对象 return new File(dir, name).isFile() && name.endsWith(".jpg"); } }); //遍历 for (String s : strArray) { System.out.println(s); } } }