Java之IO流File类的详细解释

File类

File属于java.io包下的一个操作文件或者是文件夹的类,它涉及到对文件或者文件目录的创建,删除,修改文件名,查询文件名等操作的方法,并未涉及到对文件内容的读写操作。

File类常用构造
  • File(String filePath):通过一个路径创建文件
  • File(String parentPath,String childPath):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
  • File(File parentFile,String childPath):根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
    //路径创建文件
    File file = new File("D:\\1.txt");
    //父路径和子路径File
    File f2 = new File("D:\\JavaStudy", "javaee")
    File fatherFile = new File("D:\\demo");
    File childFile = new File(fatherFile, "2.txt");//D:\\demo\\2.txt
绝对路径与相对路径

绝对路径:从盘符开始的路径,比如C:\windows\system32\cmd.exe

相对路径:从当前路径开始的路径,假设当前路径为C:\windows,描述上述路径,只需要输入system32\cmd.exe即可

路径分隔符(;)与名称分隔符(\)

路径分隔符是将路径使用 ;进行隔开,名称分隔符相当于“D:\java\demo01”中的\进文件分隔

不同操作系统下的路径分隔符与名称分隔符是不一样的,因此在开发中路径尽量不写“D:\java\demo01”成这样。j尽量使用File.separator让路径连接在一起

File类的常用方法
  • createNewFile():创建文件,存在就不创建
  • mkdir():创建单级文件夹
  • mkdirs():创建多级文件夹
  • delete():删除File对象,只能删除文件或者空文件夹
  • isDirectory():是否是文件夹
  • isFile():是否是文件
  • exits():文件是否存在
  • canRead():是否可读
  • canWrite():是否可写
  • isHidden():是否隐藏

使用上面的方法:

    //这样写相当于D:\1.txt
	File file = new File("D:" + File.separator + "1.txt");
 	//判断文件名是否存在存在则,创建文件1.txt
	if(!file.exists()) {
    
    
			file.createNewFile();
		}
    //创建目录mkdir()
    File folder = new File("D:\\demo");
    System.out.println(folder.mkdir());

	//创建多级目录mkdirs()
    File folder2 = new File("D:\\text\\new");
    System.out.println(folder2.mkdirs());//创建多级目录

    //删除文件
    //file.delete();
    //删除单级空目录demo
    //folder.delete();
    //删除text(非空目录不可删除)
    //folder2.delete();

    //是否是文件
    System.out.println(file.isFile());//t
    //是否是目录
    System.out.println(file.isDirectory());//f
    //是否存在
    System.out.println(file.exists());//t
    //是否可读
    System.out.println(file.canRead());//t
    //是否可写
    System.out.println(file.canWrite());//t
    //是否隐藏
    System.out.println(file.isHidden());//f
  • renameTo(File dest):将一个File对象重名名为指定的File对象
  • getAbsoultPath():获取绝对路径
  • getPath():将此File转换为路径名字符串,获取的构造方法中传递的路径
  • getName():获取文件或目录的名称名称
  • getParent():获取上层文件目录路径
  • length():获取字节数,文件夹没大小概念的
  • lastModified():获取最后一次修改时间的毫秒

使用上面的方法:

    File file = new File("io\\a.txt");
    //文件不存在,创建文件
    if(!file.exists()) {
    
    
    file.createNewFile();
    }
    File file2 = new File("C:\\Users\\HP\\Desktop\\demo");
    //获取绝对路径
    System.out.println(file.getAbsolutePath());//D:\JavaStudy\JavaSE\JavaSE\io\a.txt
    System.out.println(file2.getPath());//C:\Users\HP\Desktop\demo
    //获取构造路径(就是当前路径)
    System.out.println(file.getPath());//io\\a.txt
    //获取路径下的文件名称
    System.out.println(file.getName());//a.txt
    System.out.println(file2.getName());//demo
    //获取上层的文件路径
    System.out.println(file.getParent());//io
    System.out.println(file2.getParent());//C:\Users\HP\Desktop
    //获取文件的大小,文件夹没大小概念,始终为0
    System.out.println(file.length());//4
    System.out.println(file2.length());//0
    //获取最后一次修改文件的时间毫秒
    System.out.println(file.lastModified());//1595237549049

单独看一下renameTo(File dest)的运用:

  • 同一路径下是复制
  • 不同路径下先剪切后复制
    File file = new File("D:\\a.txt");//存在
    File dest = new File("D:\\b.txt");//不存在
    //修改的文件名在同一个路径下重命名成功
    file.renameTo(dest);
    //不在同一路径下先剪切后复制
    File dest2 = new File("E:\\e.txt");
    dest.renameTo(dest2);

看一下剩下的方法:

  • String[] list():获取目录下所文件和文件夹的名称
  • File[] listFiles():获取目录下所文件和文件夹的File对象
  • String[] list(filenameFilter):通过指定的文件名称过滤器将不符合条件的文件过滤掉
  • File[] listFiles(filenameFilter):通过指定的文件名称过滤器将不符合条件的文件过滤掉
  • File[] listFiles(FileFilter filter)抽象方法:用来过滤文件的方法
  • File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
    File file = new File("D:\\");
    //获取D盘下的所有文件的绝对路径
    File[] files = file.listFiles();
    for (File file2 : files) {
    
    
        System.out.println(file2.getAbsolutePath());
    }

获取当前项目下的所有.java的文件:

①.使用String[] list(filenameFilter)方法进行过滤文件,filenameFilter是文件过滤器接口提供过滤文件的方法:

	public static void main(String[] args) throws IOException {
    
    
        //.表示当前项目路径
		File folder = new File(".");
		checkName(folder);
	}	
	public static void checkName(File folder) {
    
    
		String[] names = folder.list(new FilenameFilter() {
    
    
			//dir:文件所在的文件夹路径
			//name: 文件的名称
			@Override
			public boolean accept(File dir, String name) {
    
    
				//将文件路径生成file对象
				File file = new File(dir, name);
                //如果是文件夹继续检查
				if(file.isDirectory()) {
    
    
					checkName(file);
					return false;
				}
				return name.endsWith(".java");
			}
		});
		for (String flieName : names) {
    
    
			System.out.println(flieName);
		}
	}

②File[] listFiles(filenameFilter)来过滤文件:这两种方法的是用是一摸一样的,不一样的点就是一个存文件名,一个存文件的路径而已,

public static void main(String[] args) throws IOException {
    
    
		File folder = new File(".");
		checkName(folder);
	}

	public static void checkName(File folder) {
    
    
		File[] files = folder.listFiles(new FilenameFilter() {
    
    
			@Override
			public boolean accept(File dir, String name) {
    
    
				File file = new File(dir, name);
				if(file.isDirectory()) {
    
    
					checkName(file);
					return false;
				}
				return name.endsWith(".java");
			}
		});
		for (File file : files) {
    
    
			System.out.println(file.getName());
		}
	}

以上两种方法输出的结果是一样的!!!如果对文件名进行操作使用第一种,对文件路径进行操作用第二种。

猜你喜欢

转载自blog.csdn.net/qq_41857955/article/details/107474751
今日推荐