IO流学习笔记1——File类

﹏ヽ暗。殇╰゛Y 2022-08-04 00:38 219阅读 0赞

Java的IO支持通过java.io包下的类和接口来支持,在java.io包下主要包括 输入、 输出两种IO流,每种输入、输出流又可以分为 字节流和 字符流两大类。其中字节流以字节为单位,来处理输入、输出操作,而字符流则以字符来处理输入、输出操作。除此之外,Java的IO流使用了一种装饰器设计模式,它将IO流分成底层 节点流和上层 处理流,其中节点流用于和底层物理存储节点直接关联——不同物理节点获取节点流的方式可能存在一定的差异,但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入、输出代码来读取不同物理存储节点的资源。

File类

File类是java.io包下代表与平台无关的文件和目录,也就是说如果希望在程序中操作文件或目录都可以通过File类来完成,值得指出的是,不管是文件、还是目录,都是使用File来操作的, File能新建、删除和重命名文件或目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

在Windows的路径分隔符使用反斜杠(\),而Java程序中的反斜杠表示转义字符,所以如果需要在Windows中路径下包括反斜杠,应该用两条反斜杠,如:C:\\IO\\test.java,或者直接使用斜线也可以,如:C:/IO/test.java,Java程序支持将斜线当成平台无关的路径分隔符。

File类访问文件或目录使用的例子,代码如下:

  1. package com.songguoliang.io;
  2. import java.io.File;
  3. import java.io.IOException;
  4. /**
  5. * File类使用方法
  6. * @date 2015-08-13 14:32:16
  7. * @author sgl
  8. */
  9. public class FileTest {
  10. public static void main(String[] args) throws IOException {
  11. //以当前路径来创建一个File对象,也可以使用绝对路径创建File对象
  12. File file=new File(".");
  13. //直接获取文件名,输出一个点
  14. System.out.println(file.getName());
  15. //获取抽象路径名的字符串形式
  16. System.out.println(file.getPath());
  17. //获取相对路径的父路径可能出错,下面代码输出null
  18. System.out.println(file.getParent());
  19. //获取绝对路径
  20. System.out.println(file.getAbsoluteFile());
  21. //获取上一级路径
  22. System.out.println(file.getAbsoluteFile().getParent());
  23. //在当前路径下创建一个临时文件
  24. File tmpFile=File.createTempFile("aaa", ".txt", file);
  25. //指定当JVM退出时删除该文件
  26. tmpFile.deleteOnExit();
  27. //以系统当前时间作为新文件名来创建新文件
  28. File newFile=new File(System.currentTimeMillis()+"");
  29. System.out.println("newFile对象是否存在:"+newFile.exists());
  30. //以指定newFile对象来创建一个文件
  31. newFile.createNewFile();
  32. //以newFile对象来创建一个目录,因为newFile已经存在,所以下面方法返回false,即无法创建该目录
  33. newFile.mkdir();
  34. //使用list方法来列出当前路径下的所有文件和路径,tmpFile临时文件也会列出,但程序结束之后目录下看不到该文件,因为JVM退出时删除了该文件
  35. String[]fileList=file.list();
  36. System.out.println("=====当前路径下所有文件和路径如下=====");
  37. for(String fileName:fileList){
  38. System.out.println(fileName);
  39. }
  40. //listRoots静态方法列出所有的磁盘跟路径
  41. File[]roots=File.listRoots();
  42. System.out.println("======系统所有根路径如下======");
  43. for(File root:roots){
  44. System.out.println(root);
  45. }
  46. }
  47. }

File类的list方法,可以接受一个FilenameFilter参数,过滤显示指定的文件或目录,这种用法是一个典型的Command设计模式,因为File的list方法需要一个判断规则:判断哪些文件应该被列出——这段判断规则需要一个代码块,但由于JDK不支持直接向方法传入代码块,所以java使用了accept方法来封装该代码块。也就是说,我们传入的FilenameFilter对象的唯一作用就是传入accept方法的方法体,该方法体指定哪些文件应该被列出。使用方法如下:

  1. package com.songguoliang.io;
  2. import java.io.File;
  3. import java.io.FilenameFilter;
  4. /**
  5. * FilenameFilter类的使用
  6. * @date 2015-08-11 12:02:20
  7. * @author sgl
  8. */
  9. public class FilenameFilterTest {
  10. public static void main(String[]args){
  11. //创建一个File实例
  12. File file=new File(".");
  13. //file的list方法可以接收FilenameFilter参数,传入自定义的filter,list方法会遍历调用filter的accept方法
  14. String[] nameList=file.list(new MyFilenameFilter());
  15. for(String name:nameList){
  16. System.out.println(name);
  17. }
  18. }
  19. }
  20. /**
  21. * 实现java.io.FilenameFilter接口的accept方法,自定义控制文件或目录是否显示
  22. * @date 2015-08-11 12:03:06
  23. * @author sgl
  24. */
  25. class MyFilenameFilter implements FilenameFilter{
  26. /*
  27. * java.io.FilenameFilter
  28. * (non-Javadoc)
  29. * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
  30. * @date 2015-08-11 12:04:44
  31. * @author sgl
  32. */
  33. @Override
  34. public boolean accept(File dir, String name) {
  35. //只包含.java后缀文件或目录
  36. return name.endsWith(".java")||new File(name).isDirectory();
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,219人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java IO---File

    一、File类 1 概述 `java.io.File` 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 2 构造方法 `

    相关 JavaSE IO( 3 ) File

    File类 File类用来将文件或者文件夹封装成对象,方便对文件与文件夹进行操作。 File类就弥补了IO流的不足。IO流无法操作文件夹,无法操作文件的属性信息,只能

    相关 Java IO File

    File类介绍 File是java.io包下面的一个类,代表与平台无关的文件或者目录。JAVA中,无论文件还是目录,都可以看作File类的一个对象。File类能对文件或目录新