(七)、Java复习笔记之 I/O 流(1)
程序员文章站
2024-03-03 20:22:40
...
I/O流体系图:
79、File类
- 概述
- 文件和目录路径名的抽象表示形式
- File更应该叫做一个路径
- 文件路径或者文件夹路径
- 路径分为绝对路径和相对路径
- 绝对路径是一个固定的路径,从盘符开始
- 相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下指的是当前路径
-
构造方法
- File(String pathname):根据一个路径得到File对象
- File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
-
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File file = new File("F:\\Java笔记\\video\\今日内容.avi"); //第一个\是转义 String parent = "F:\\Java笔记\\video"; String child = "今日内容.avi"; File file = new File(parent,child); File parent = new File("F:\\Java笔记\\video"); String child = "今日内容.avi"; File file = new File(parent, child);
80、File类的创建功能
-
创建功能
- public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
- public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
-
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来(级联创建)
File file = new File("yyy.txt"); file.createNewFile(); File dir1 = new File("aaa"); dir1.mkdir() File dir3 = new File("ccc\\ddd"); dir3.mkdirs()
- 注意事项:
- 如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
81、File类的重命名和删除功能
- 重命名和删除功能
- public boolean renameTo(File dest):把文件重命名为指定的文件路径
- public boolean delete():删除文件或者文件夹
- 重命名注意事项
- 如果路径名相同,就是改名。
- 如果路径名不同,就是改名并剪切。
-
删除注意事项:
- Java中的删除不走回收站。
-
要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
File file1 = new File("ooo.txt"); File file2 = new File("D:\\xxx.txt"); System.out.println(file1.renameTo(file2)); File file1 = new File("yyy.txt"); System.out.println(file1.delete());
82、File类的判断功能
- 判断功能
- public boolean isDirectory():判断是否是目录
- public boolean isFile():判断是否是文件
- public boolean exists():判断是否存在
- public boolean canRead():判断是否可读
- public boolean canWrite():判断是否可写
- public boolean isHidden():判断是否隐藏
-
实例
File file = new File("zzz"); file.setReadable(false); System.out.println(file.canRead()); //true,windows系统认为所有的文件都是可读的 file.setWritable(false); System.out.println(file.canWrite()); //false,windows系统可以设置为不可写
83、File类的获取功能
- 获取功能
- public String getAbsolutePath():获取绝对路径
- public String getPath():获取路径(获取构造方法中传入路径)
- public String getName():获取名称
- public long length():获取长度。字节数
- public long lastModified():获取最后一次的修改时间,毫秒值
- public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
- public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
-
实例:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
File dir = new File("E:\\"); String[] arr = dir.list(); //获取e盘下所有的文件或文件夹 for (String string : arr) { if(string.endsWith(".jpg")) { System.out.println(string); } } // 或者 File[] subFiles = dir.listFiles(); //获取e盘下所有的文件或文件夹对象 for (File subFile : subFiles) { if(subFile.isFile() && subFile.getName().endsWith(".jpg")) { System.out.println(subFile); } }
84、文件名称过滤器
- 概述
- public String[] list(FilenameFilter filter):获取满足指定过滤器的文件和目录。
- public File[] listFiles(FileFilter filter)
-
实例:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
File dir = new File("E:\\"); String[] arr = dir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { //System.out.println(dir); //E:\ //System.out.println(name); //E盘里的文件名或文件夹名 File file = new File(dir, name); return file.isFile() && file.getName().endsWith(".jpg"); } }); for (String str : arr) { System.out.println(str); }
85、File实例
-
从键盘接收一个文件夹路径,统计该文件夹大小
public static void main(String[] args) { //File dir = new File("F:\\day06"); //System.out.println(dir.length()); //直接获取文件夹的结果是0 File dir = getDir(); System.out.println(getFileLength(dir)); } //从键盘接收一个文件夹路径 public static File getDir() { //1,创建键盘录入对象 Scanner sc = new Scanner(System.in); System.out.println("请输入一个文件夹路径:"); //2,定义一个无限循环 while(true) { //3,将键盘录入的结果存储并封装成File对象 String line = sc.nextLine(); File dir = new File(line); //4,对File对象判断 if(!dir.exists()) { System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:"); }else if(dir.isFile()) { System.out.println("您录入的是文件路径,请输入一个文件夹路径:"); }else { //5,将文件夹路径对象返回 return dir; } } } //统计该文件夹大小 public static long getFileLength(File dir) { //1,定义一个求和变量 long len = 0; //2,获取该文件夹下所有的文件和文件夹listFiles(); File[] subFiles = dir.listFiles(); //3,遍历数组 for (File subFile : subFiles) { //4,判断是文件就计算大小并累加 if(subFile.isFile()) { len = len + subFile.length(); //5,判断是文件夹,递归调用 }else { len = len + getFileLength(subFile); } } return len; }
-
从键盘接收一个文件夹路径,删除该文件夹
public static void main(String[] args) { File dir = Test1.getDir(); //获取文件夹路径 deleteFile(dir); } //从键盘接收一个文件夹路径 public static File getDir() { //1,创建键盘录入对象 Scanner sc = new Scanner(System.in); System.out.println("请输入一个文件夹路径:"); //2,定义一个无限循环 while(true) { //3,将键盘录入的结果存储并封装成File对象 String line = sc.nextLine(); File dir = new File(line); //4,对File对象判断 if(!dir.exists()) { System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:"); }else if(dir.isFile()) { System.out.println("您录入的是文件路径,请输入一个文件夹路径:"); }else { //5,将文件夹路径对象返回 return dir; } } } //删除该文件夹 public static void deleteFile(File dir) { //1,获取该文件夹下的所有的文件和文件夹 File[] subFiles = dir.listFiles(); //2,遍历数组 for (File subFile : subFiles) { //3,判断是文件直接删除 if(subFile.isFile()) { subFile.delete(); //4,如果是文件夹,递归调用 }else { deleteFile(subFile); } } //5,循环结束后,把空文件夹删掉 dir.delete(); }
-
从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
public static void main(String[] args) throws IOException { File src = Test1.getDir(); File dest = Test1.getDir(); if(src.equals(dest)) { System.out.println("目标文件夹是源文件夹的子文件夹"); }else { copy(src,dest); } } //从键盘接收一个文件夹路径 public static File getDir() { //1,创建键盘录入对象 Scanner sc = new Scanner(System.in); System.out.println("请输入一个文件夹路径:"); //2,定义一个无限循环 while(true) { //3,将键盘录入的结果存储并封装成File对象 String line = sc.nextLine(); File dir = new File(line); //4,对File对象判断 if(!dir.exists()) { System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:"); }else if(dir.isFile()) { System.out.println("您录入的是文件路径,请输入一个文件夹路径:"); }else { //5,将文件夹路径对象返回 return dir; } } } //把其中一个文件夹中(包含内容)拷贝到另一个文件夹中 public static void copy(File src, File dest) throws IOException { //1,在目标文件夹中创建原文件夹 File newDir = new File(dest, src.getName()); newDir.mkdir(); //2,获取原文件夹中所有的文件和文件夹,存储在File数组中 File[] subFiles = src.listFiles(); //3,遍历数组 for (File subFile : subFiles) { //4,如果是文件就用io流读写 if(subFile.isFile()) { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName()))); int b; while((b = bis.read()) != -1) { bos.write(b); } bis.close(); bos.close(); //5,如果是文件夹就递归调用 }else { copy(subFile,newDir); } } }
-
从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印, 例如:
aaa是文件夹,里面有bbb.txt,ccc.txt,ddd.txt这些文件,有eee这样的文件夹,eee中有fff.txt和ggg.txt,打印出层级来
*public static void main(String[] args) { File dir = Test1.getDir(); //获取文件夹路径 printLev(dir,0); } //从键盘接收一个文件夹路径 public static File getDir() { //1,创建键盘录入对象 Scanner sc = new Scanner(System.in); System.out.println("请输入一个文件夹路径:"); //2,定义一个无限循环 while(true) { //3,将键盘录入的结果存储并封装成File对象 String line = sc.nextLine(); File dir = new File(line); //4,对File对象判断 if(!dir.exists()) { System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:"); }else if(dir.isFile()) { System.out.println("您录入的是文件路径,请输入一个文件夹路径:"); }else { //5,将文件夹路径对象返回 return dir; } } } //把文件夹中的所有文件以及文件夹的名字按层级打印 public static void printLev(File dir,int lev) { File[] subFiles = dir.listFiles(); //1,遍历数组 for (File subFile : subFiles) { for(int i = 0; i <= lev; i++) { System.out.print("\t"); } //2,无论是文件还是文件夹,都需要直接打印 System.out.println(subFile); //3,如果是文件夹,递归调用 if(subFile.isDirectory()) { //printLev(subFile,lev + 1); printLev(subFile,++lev); } } }
上一篇: java中的char占几个字节实例分析
下一篇: Android如何实现压缩和解压缩文件