io流--File类
IO流
流的概念
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
必有源端和目的端,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
IO流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
File类的出现
File类的构造方法,
public File(String pathname) 实例化File类的时候,必须设置好路径
No. |
方法或常量 |
类型 |
描述 |
1 |
public static final String pathSeparator |
常量 |
表示路径的分隔符(windows是“;”) |
2 |
public static final String separator |
常量 |
表示路径的分隔符(windows是“\”) |
3 |
public File(String pathname) |
构造 |
创建File类对象,传入完整路径 |
4 |
public boolean createNewFile()throws IOException |
普通 |
创建新文件 |
5 |
public boolean delete() |
普通 |
删除文件 |
6 |
public boolean exists() |
普通 |
判断文件是否存在 |
7 |
public boolean isDirectory() |
普通 |
判断给定的路径是否在一个目录 |
8 |
public long length() |
普通 |
返回文件的大小 |
9 |
public String[] list() |
普通 |
列出指定目录的全部内容,只是名称 |
10 |
public File[] listFiles() |
普通 |
列出指定目录的全部内容,会有路径 |
11 |
Public Boolean mkdir() |
普通 |
创建一个目录 |
12 |
Public Boolean renameTo(File dest) |
普通 |
为已有的文件重命名 |
代码演示
系统有关的路径分割符:
public static void method01() { // 与系统有管的路径分隔符 // win ; linux : System.out.println(File.pathSeparator);// ; // 与系统名称有关的名称分割符 // win \ linux / System.out.println(File.separatorChar);// \ }
File的三种封装
public static void method02() { // 封装 第一种 File file = new File("D:\\demo0611\\a.txt"); System.out.println(file); // 封装 第二种 a,txt 可以作为参数进行传入---参数(文件)不确定用 File file2 = new File("D:\\demo0611", "a.txt"); // 封装 第三种 File file3 = new File(new File("D:\\demo0611"), "a.txt"); }
File类的获取文件名,路径
public static void method03() { File file = new File("D:\\demo0611\\a.txt"); // 获取FILE类对象的 //绝对路径--构造方法不能判断是否是真的 String abpath = file.getAbsolutePath(); System.out.println(abpath); // 获取文件名 String filename = file.getName(); System.out.println(filename);//a.txt // 获取路径名 String filepath = file.getPath(); System.out.println(filepath);//D:\demo0611\a.txt //获取文件长度--就是大小占内存的大小 System.out.println(file.length());//就是大小占内存的大小 }
File的建立,判断
public static void method04() throws IOException{ //不识别大小写 ,不能重复建立 //用方法创建文件--注意 只能创建文件,,文件存在不能被覆盖 File file =new File("D:\\demo0611\\a.txt"); //file.createNewFile();//报错 是因为 构造方法 file 不进行判断文件是否存在 //判断file对象封装的文件或文件加-返回布尔值- System.out.println(file.exists());//true //删除文件--文件或文件夹都可已被删除 File file =new File("D:\\demo0611\\a"); file.delete(); //创建一级文件夹--mkdir--只能创建文件夹,文件夹存在不能被覆盖 //file.mkdir(); //创建多级文件夹--mkdirs File file =new File("D:\\demo0611\\c\\c\\v\\c"); //file.mkdirs(); //判断文件是否是文件夹 System.out.println(file.isDirectory());//flas //判断是否是文件 System.out.println(file.isFile());//flas }
listFiles()方法介绍
list()方法是返回某个目录下的所有文件和目录的文件名,返回的是String数组
listFiles()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组
public static void method05(){ File file=new File("D:\\demo0611"); //获取路径下的文件和文件加的String[]---只打印文件名 b.txt String[] files=file.list(); //遍历 for(String s: files){ System.out.println(s); } //获取所有路径下的文件和文件夹的files[]-- 打印问文件路径D:\demo0611\b.txt File[] filess=file.listFiles(); for(File f:filess){ System.out.println(f); }
文件过滤器
通过listFiles()方法,我们可以获取到一个目录下的所有文件和文件夹
java.io.FilenameFilter是文件名过滤器,用来过滤不符合规格的文件名,并返回合格的文件;
1)String[] fs = f.list();
(2)File[] fs = f.listFiles();
这两个方法返回f下的所有文件或目录;
FilenameFilter用来把符合要求的文件或目录返回;
因此可以调用:
(1)String []fs = f.list(new MyFilter ());;
(2)File[]fs = f.listFiles(new MyFilter ());
文件名过滤器一般用法
1.实现FilenameFilter接口;
2.实现boolean accept(File dir,String name); //dir表示文件的当前目录,name表示文件名;
//定义类实现文件名称FilenameFilter过滤器
public class MyFilter implements FileFilter { //描述条件 @Override public boolean accept(File pathname) { //如果是文件夹 - return true if(pathname.isDirectory()){ return true; } //获取文件名 String filename=pathname.getName(); //将文件名转成小写 filename=filename.toLowerCase(); //endsWith 指定字符最为后缀 return filename.endsWith(".java"); } 开始过滤文件 public static void main(String[] args) { File file =new File("D:\\demo0611"); //调用文件过滤器 File[] files=file.listFiles(new MyFilter()); //遍历 for(File f: files ){ System.out.println(f); }