day22 io

1.概念

  • 程序需要持久保存到设备硬盘时候用到
  • output input io操作

2.file

  • 包括文件夹,文件和路径,Java中file类和平台(操作系统)无关
  • \是window盘符,/是linux盘符
  • 将文件(file),目录(文件夹director),路径(path)封装成file对象
  • 有静态方法char类和String类,用法均一样,返回值不一样
File.pathSeparator是路径分隔符(;)
File.separator是目录分隔符
以上均跟随系统自动变换window中是";"和"\"
Linux中是":"和"/"
想做系统无关性则不能写死需要用到以上两个静态

3.构造方法

new File("c:\\abc\\demo.java");
new File("c:\\abc");
/*
-可写到具体文件名也可以写道文件夹
-是双斜线,否则单斜线是转义含义
-window下不区分大小写,linux会区分大小写
-tostring重写过显示是file内path
-此处不会关心是否真实路径,方法exist()来判断路径是否存在
-绝对路径整个系统唯一
-相对路径是指相对关系,有一个参考点(某个文件夹)
-同一目录下都是平级
*/

new File("c:","abc");传入父路径和子路径,灵活性更高
new File(new File("c:"),"abc");父路径是一个file对象

4.创建删除

boolean a=new File("C:\\Users\\fengbo\\Desktop\\aaaaa").createNewFile();
文件已存在则不创建返回false,此方法不能创建文件夹
    boolean a=new File("C:\\Users\\fengbo\\Desktop\\aaaaa").mkdir()创建文件夹
mkdirs()则会创建多级文件夹,也能创建单个,推荐使用
------------
delete()删除文件或文件夹
直接硬盘删除不会去回收站
不存在或打开状态删除失败

5.获取功能

file.getName()
不管存不存在仅负责获取文件创建时候最后文件或文件夹名称
file.getPath();和tostring一样获取全路径
long length()获取文件字节但不能获得文件夹大小
string getAbsolutePath()获得绝对路径  file  getAbsoluteFile()
eclipse下写相对路径默认是工程根目录
file.getParent()和file.getParentFIle()获得父路径,返回值不一样

6.判断

boolean exists()路径下文件是否存在
boolean isfile和isDirectory()在判断之前确定exists

7.获取

string[] list(),file[] listfiles()
返回数组字符串的话按字母来排
静态方法 File.listRoots()返回根目录数组

8.过滤器

import java.io.File;
import java.io.FileFilter;


public class MyFilter implements FileFilter {

    @Override
    public boolean accept(File pathname) {
        if (pathname.isDirectory()) {
            return true;
        }
        
        return pathname.getName().toLowerCase().endsWith(".java");
endswith会区分大小写
    }

}
过滤器没给出可用对象,需要自己继承filefileter实现
作用是获取符合条件文件文件夹
-------------------------------
public  static void getFile1(File file)
{

    File[] filelist=file.listFiles(new MyFilter());
    for (File filelistarr:filelist) {
        if (filelistarr.isDirectory()) {
            getFile1(filelistarr);
        }else {
            System.out.println(filelistarr);
            
        }
    }
}
listFiles会自动调用自定义myfilter中的accept重写方法,
并将全路径传给accept中参数pathname,
accept收到pathname进行判断,真则返回file,假则不返回
-----------------------------
递归:自己调用自己
适用于方法不变,方法参数改变
注意:递归一定要要出口,次数不能多,5000次左右就会算不出数值
递归速度慢,是不停方法进栈然后等最尽头算出依次返回

你可能感兴趣的:(day22 io)