--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
1. File
File类是把文件和文件夹封装成了对象,方便操作文件或者是文件夹的属性,在创建的时候有通过构造方法来指定,有三种格式:
new File(“C:\\java\\a.txt”);
new File(“C:\\java”,“a.txt”);//这一种方法比第一种方法的优点是:把路径分开了,可以方便指定同一个文件夹下的文件
new File(“C:”+ File.separator +” java”+”a.txt”);//这一个方法可跨平台的使用,分隔符是跨平台的File.separator。
2. 基本方法
1.创建
创建分为创建文件和创建文件夹(目录)
import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException { /* 指定文件对象 */ File f = new File("F:" + File.separator + "java"); File file = new File("F:\\java\\a.txt"); /* * boolean mkdir()创建单级目录,当存在此目录,创建失败(false),否则创建成功(true) 例如:F:\\java * F盘必须存在 F:\\java\123 F:\\java必须存在 boolean * mkdirs()可以创建多级目录,即使前面的目录不存在,那么也会创建,存在此创建失败,不存在创建成功 * 例如:F:\\java\day01\\hello 即使F盘中不存在java\\day01 那么使用此方法,也会创建前面不存在的目录 * createNewFile() * 创建文件,指定的目录必须存在(F:\\java),如果此目录中存在此文件,此创建失败(false),不存在,则创建成功(true) */ System.out.println(f.mkdir());// 创建单级目录 System.out.println(file.createNewFile());// 创建文件 System.out.println(new File("F:\\java\\123\\456").mkdirs());// 创建多级目录 } }
2. 删除
public class FileDemo { public static void main(String[] args) throws IOException { /* 指定文件对象 */ File f = new File("F:" + File.separator + "java"); File file = new File("F:\\java\\a.txt"); /* * boolean delete()删除文件或者是目录(空的),如果不存在,则是false,存在则删除 * void deleteOnExit()程序退出时删除,即使前面出现了异常,那么在程序结束的时候也会执行此语句,删除此文件 */ System.out.println(f.delete());// 删除目录 System.out.println(file.delete());// 删除文件 } }
3. 判断
import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException { /* 指定文件对象 */ File f = new File("F:" + File.separator + "java"); File file = new File("F:\\java\\a.txt"); /* * boolean exists()判断文件或者目录是否存在 boolean isFile()判断是否是文件 boolean * isDirectory()判断是否是目录 boolean isHidden()判断是否是隐藏文件 boolean * isAbsolute()判断是否是绝对路径 */ System.out.println(f.exists());// 是否存在 System.out.println(file.isFile());// 是否是文件,若存在,切是文件,那么就是true,否则是false System.out.println(file.isDirectory());// 判断是否是目录,存在且是文件,那么就是true,否则是false System.out.println(file.isAbsolute());// 判断是否是绝对路径 } }
4. 获取
boolean renameTo(File dest)重命名,也可以模拟移动哦,重命名到其他文件夹中,那就是移动了
import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException { /* 指定文件对象 */ File f = new File("F:" + File.separator + "java"); File file = new File("F:\\java\\a.txt"); /* * String getName()获得文件名称 * String getParent()获得上一目录 String * getAbsolutePath()获得绝对路径 * long length()获得文件大小 long * lastModified()获得最后一次修改的时间 */ System.out.println(f.getName());// 获得名称 System.out.println(file.getName());// 获得名称 System.out.println(f.getParent());// 获得上一目录 System.out.println(file.getParent());// 获得上一目录 System.out.println(f.getAbsolutePath());// 获得绝对路径 System.out.println(file.getAbsolutePath());// 获得绝对路径 } } 结果: java a.txt F:\ F:\java F:\java F:\java\a.txt
3.常用方法
public class FileDemo { public static void main(String[] args) throws IOException { /* * String[] list()获得指定文件下的所有文件或者目录的名称(包含隐藏文件活目录) String[] list(FilenameFilter filter)获得名称的时候加入了过滤器(包含隐藏文件活目录) * File[] listFiles()获得的是指定文件下的所有File对象(包含隐藏文件活目录) * File[] listFiles(FilenameFilter filter)加入了过滤器(包含隐藏文件活目录) * static File[]listRoots()列出了可用目录的根 */ /* 获得所有的根目录,并打印出 */ File[] rootFiles = File.listRoots(); for (File f : rootFiles) System.out.println(f); /* 获得F盘下的所有文件或者目录的名称,并打印出 */ String[] fileNames = new File("F:\\").list(); System.out.println("-----------------\n所有名称"); for (String name : fileNames) System.out.println(name); /* 获得F盘下的所有.txt文件安的名称,并打印出,使用的是过滤器,使用匿名内部类,复写accept方法 */ String[] fileTxtNames = new File("F:\\").list(new FilenameFilter() { public boolean accept(File dir, String name) {// 此方法决定是否把其名字过滤 return name.endsWith(".txt"); } }); System.out.println("-----------------\n.txt文件"); for (String n : fileTxtNames) System.out.println(n); /*File[] listFiles()用法和list()用法一样,只是返回的是File对象数组*/ File [] Files=new File("F:\\").listFiles(); System.out.println("-----------------"); for(File f:Files) System.out.println(f.getName()+":"+f.length()); } } 结果: C:\ D:\ E:\ F:\ G:\ ----------------- 所有名称 $RECYCLE.BIN A B ClassDemo.java Config.Msi demo.txt demo1.txt exception.log IP地址.doc itat java培训视频 jsp music System Volume Information SystemInfo.txt voa yy 录音 新建文本文档.txt 照片 电子书 随笔知识点 黑马 黑马笔记 ----------------- .txt文件 demo.txt demo1.txt SystemInfo.txt 新建文本文档.txt ----------------- $RECYCLE.BIN:4096 A:0 B:0 ClassDemo.java:682 Config.Msi:0 demo.txt:6 demo1.txt:8 exception.log:123 IP地址.doc:58368 itat:4096 java培训视频:4096 jsp:4096 music:28672 SystemVolume Information:0 SystemInfo.txt:1904 voa:0 yy:0 录音:4096 新建文本文档.txt:29 照片:4096 电子书:4096 随笔知识点:4096 黑马:4096 黑马笔记:16384
4. 输出目录下的所有内容
利用的是递归算法
import java.io.File; import java.io.FilenameFilter; import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException { File file = new File("F:\\黑马"); showDir(file, 0); } /* 格式方式 */ public static String show(int level) { StringBuilder sb = new StringBuilder(); sb.append("|-"); for (int i = 0; i < level; i++) { sb.insert(0, " "); } return sb.toString(); } /* 利用递归显示 */ public static void showDir(File dir, int level) { System.out.println(show(level) + dir.getName()); level++; File[] Files= dir.listFiles(); for (int x = 0; x < Files.length; x++) { if (Files[x].isDirectory()){// 若是目录,继续递归 showDir(Files[x], level); } else { System.out.println(show(level) + Files[x].getName()); } } } } 结果: |-heima |-Game.rar |-Java常用英语汇总.doc |-java特性.jpg |-思维导图 |-01-Java 概述.png |-02-Java基础语法.png |-03-面向对象.png |-面试测试题 |-aa.java |-exam.zip |-黑马活动 |-DVD管理系统----附带代码 |-DVD管理系统简介.doc |-公约数和公倍数---附带代码 |-gysAndgbs.java |-Person.java |-sushu.java |-公约数,公倍数和素数.doc |-员工打卡系统----附带代码 |-员工打卡系统.doc |-打印系统----附带代码 |-打印系统.doc |-提交作业验证系统---附带代码 |-作业提交验证.doc |-算法--迭代和递归---附带代码 |-方程的解-迭代,递归.doc |-方程解---代码.doc |-方程解---迭代图.png |-阶乘--递归---代码.doc |-阶乘运行结果案例.png
5. 删除文件夹
思路:
从里向外删除,先删除文加夹中的文件。当文件没了,然后在删除此空文件夹,因为文件夹中有文件的话,删除不了。所以先清除里面的文件。使用的也是递归。
import java.io.File; public class DeleteFileDemo { public static void main(String[] args) { File file = new File("F:\\heima"); deleteDir(file); } public static void deleteDir(File dir) { File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) deleteDir(files[i]); else System.out.println(files[i].delete()); } System.out.println(dir.delete()); } }
6. 练习
一个文件夹中的文件路径存到一个文件中,这样可以方便我们查找。
思路:
1. 遍历文件夹中的所有文件,找到我们符合条件的文件,然后存到一个集合中。
2. 遍历此集合,然后存到一个文件中。
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class Demo { public static void main(String[] args) throws IOException { File file= new File("F:\\黑马笔记"); File filepath = new File("F:\\doc.txt"); List<File> list = new ArrayList<File>(); getFile(file,list); writerToFile(list, filepath); System.out.println("OVER"); } /* 遍历列表,将其存到集合中 */ public static void getFile(File dir, List<File> listFiles) { File[] files = dir.listFiles(); /* 遍历列表,存到集合中 */ for (File f : files) { if (f.isDirectory()) { getFile(f, listFiles); } else { if (f.getName().endsWith(".doc"))// 判断是否是doc文件 listFiles.add(f); } } } /* 遍历集合,写到文件中 */ public static void writerToFile(List<File> listFiles, File FilePaths) throws IOException { BufferedWriter bw = new BufferedWriter(new FileWriter(FilePaths));// 定义的写入流 /* 遍历集合,把其写到文件中 */ for (File f : listFiles) { bw.write(f.getAbsolutePath());// 将绝对路径写到文件中 bw.newLine(); bw.flush(); } bw.close(); } } 结果:
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
--------------------