【Java学习笔记】IO流之File类

 

目录

1.File类的概述

1.1 File类的定义

1.2 File类的构造方法

2.File类的成员方法

2.1 创建功能

2.2 删除功能

2.3 重命名功能

2.4 判断功能

2.5 获取功能

扫描二维码关注公众号,回复: 12825605 查看本文章

2.6 高级获取功能

3.File类的练习

3.1 输出指定目录下指定后缀名的文件名称案例

3.2 文件过滤器改进输出指定目录下指定后缀名的文件名称案例  

3.3 批量修改文件名称案例


1.File类的概述

1.1 File类的定义

文件和文件夹路径名的抽象表示形式。

1.2 File类的构造方法

  • public File(String filename):根据一个路径得到File对象
  • public File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
  • public File(File parent, String child):根据一个父File和一个子文件/目录得到File对象

代码如下:

package cn.itcast_01;

import java.io.File;

/*
 * File:文件和文件夹路径名的抽象表示形式
 */
public class FileDemo {
	public static void main(String[] args) {
		// 把D:\\develop\\demo封装成一个File对象,并不是在F盘目录下创建一个目录develop\\demo
		// 仅仅表示File对象指向D:\\develop\\demo这个目录
		File file = new File("D:\\develop\\demo");
		System.out.println(file.getAbsolutePath()); // D:\develop\demo

		// public File(String parent, String child):根据一个目录和一个字文件/目录得到File对象
		File file2 = new File("D:\\develop", "demo.txt");
		System.out.println(file2.getAbsolutePath()); // D:\develop\demo.txt

		// public File(File parent, String child):根据一个父File和一个字文件/目录得到File对象
		File parentFile = new File("D:\\develop");
		File file3 = new File(parentFile, "demo.txt");
		System.out.println(file3.getAbsolutePath()); // D:\develop\demo.txt
	}
}

2.File类的成员方法

2.1 创建功能

  • public boolean createNewFile():创建文件,如果存在这样的文件,就不用创建了
  • public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不用创建了
  • public boolean mkdirs():创建文件夹,如果存在这样的文件夹,就不用创建了;如果父文件夹不存在,会自动创建出来

具体用法,参考下面的代码:

package cn.itcast_01;

import java.io.File;
import java.io.IOException;

/**
 * 创建功能
 * 
 * @author HW
 *
 */
public class FileDemo3 {
	public static void main(String[] args) {
		// 需求1:在D盘目录下创建一个文件夹test
		File file = new File("D:\\test");
		System.out.println("mkdir():" + file.mkdir());
		
		// 需求2:在D盘目录test下创建一个文件test.txt
		File file2 = new File("D:\\test\\test.txt");
		try {
			System.out.println("createNewFile():" + file2.createNewFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// 需求3:在D盘目录下创建一个文件夹demo,并在demo文件夹下创建一个文件demo.txt
		// 报异常:java.io.IOException: 系统找不到指定的路径。所以,要想在某个目录下创建内容,该目录首先必须存在!
		File file3 = new File("D:\\demo\\demo.txt");
		try {
			System.out.println("createNewFile():" + file3.createNewFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// 需求4:在D盘目录下创建一个文件夹aaa,并在aaa文件夹下创建一个文件夹bbb
		// mkdir():false,返回值为false,说明文件夹创建失败,同样的,要想在某个目录下创建内容,该目录首先必须存在!
		File file4 = new File("D:\\aaa\bbb");
		System.out.println("mkdir():" + file4.mkdir());
		
		// 对于需求4,我们可以先创建aaa文件夹,然后创建bbb文件夹,如果文件夹嵌套的层数比较多,这样做就会比较麻烦!
		// File类提供了一个简单的方法mkdirs(),来创建多层文件夹
		File file5 = new File("D:\\aaa\\bbb\\ccc\\ddd");
		System.out.println("mkdirs():" + file5.mkdirs());
	}
}

2.2 删除功能

  • public boolean delete():删除文件/文件夹

具体用法参考下面的代码:

package cn.itcast_01;

import java.io.File;
import java.io.IOException;

/**
 * 删除功能:public boolean delete():删除文件/文件夹
 * 
 * @author HW
 * 
 */
public class FileDemo4 {
	public static void main(String[] args) {
		// 在该项目根路径下创建一个文件a.txt
		File file = new File("a.txt");
		try {
			System.out.println("创建a.txt文件:" + file.createNewFile());
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 在该项目根路径下创建文件夹aaa\\bbb\\ccc
		File file2 = new File("aaa\\bbb\\ccc");
		System.out.println("创建aaa\\bbb\\bbb文件夹:" + file2.mkdirs());

		// 需求1:删除a.txt文件
		System.out.println("删除a.txt文件:" + file.delete());

		// 需求2:删除ccc文件夹
		System.out.println("删除ccc文件夹:" + file2.delete());

		// 需求3:删除bbb文件夹
		// 将File对象指向aaa\\bbb这个目录
		File file3 = new File("aaa\\bbb");
		System.out.println("删除bbb文件夹:" + file3.delete());

		// 需求4:删除aaa文件夹
		// 将File对象指向aaa这个目录
		File file4 = new File("aaa");
		System.out.println("删除aaa文件夹:" + file4.delete());
	}
}

2.3 重命名功能

  • public boolean renameTo(File dest) :如果路径名相同,就是改名。如果路径名不同,就是改名并剪切。

代码如下:

package cn.itcast_01;

import java.io.File;

/**
 * 重命名功能:public boolean renameTo(File dest) 
 * 
 * @author HW
 * 
 */
public class FileDemo5 {
	public static void main(String[] args) {
		// method1();
		method2();
	}

	/*
	 * 需求2:将D盘目录下的animal.jpeg移动到该项目的根目录下,并重命名为bird.jpeg
	 */
	private static void method2() {
		File file = new File("D:\\animal.jpeg");
		File destFile = new File("bird.jpeg");
		// 如果路径名不同,就是改名并剪切
		System.out.println("renameTo():" + file.renameTo(destFile));
	}

	/*
	 * 需求1:将D盘目录下的bird.jpeg重命名为animal.jpeg
	 */
	private static void method1() {
		File file = new File("D:\\bird.jpeg");
		File destFile = new File("D:\\animal.jpeg");
		// 如果路径名相同,就是改名
		System.out.println("renameTo():" + file.renameTo(destFile));
	}
}

2.4 判断功能

  • public boolean isDirectory():判断是否是目录(文件夹)
  • public boolean isFile():判断是否是文件
  • public boolean exists():判断是否存在
  • public boolean canRead():判断是否可读
  • public boolean canWrite():判断是否可写
  • public boolean isHidden():判断是否隐藏
package cn.itcast_01;

import java.io.File;
import java.io.IOException;

/**
 * 判断功能
 * 
 * @author HW
 *
 */
public class FileDemo6 {
	public static void main(String[] args) {
		File file = new File("test.txt");
		try {
			// 创建test.txt文件
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		System.out.println("isDirectory():" + file.isDirectory());
		System.out.println("isFile():" + file.isFile());
		System.out.println("exists():" + file.exists());
		System.out.println("canRead():" + file.canRead());
		System.out.println("canWrite():" + file.canWrite());
		System.out.println("isHidden():" + file.isHidden());
		
		// 删除test.txt文件
		file.delete();
	}
}

2.5 获取功能

  • public String getAbsolutePath():获取绝对路径
  • public String getPath():获取相对路径
  • public String getName():获取名称,返回抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。
  • public long length():获取长度,字节数
  • public long lastModified():获取最后一次的修改时间,毫秒值

具体用法参考如下代码:

package cn.itcast_01;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 获取功能
 * 
 * @author HW
 *
 */
public class FileDemo7 {
	public static void main(String[] args) {
		File file = new File("test.txt");
		try {
			// 创建test.txt文件
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		System.out.println("getAbsolutePath():" + file.getAbsolutePath());
		System.out.println("getPath():" + file.getPath());
		System.out.println("getName():" + file.getName());
		System.out.println("length():" + file.length());
		System.out.println("lastModified():" + file.lastModified());
		
		System.out.println("====================");
		
		long d = file.lastModified();
		// 根据给定的毫秒值创建Date对象
		Date date = new Date(d);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String currentDate = sdf.format(date);
		System.out.println(currentDate);
	}
}

2.6 高级获取功能

  • public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
  • public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

具体用法参考如下代码:

package cn.itcast_01;

import java.io.File;

/**
 * 高级获取功能
 * 
 * @author HW
 *
 */
public class FileDemo8 {
	public static void main(String[] args) {
		File file = new File("D:\\develop");
		
		// public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
		String[] fileNameArray = file.list();
		for (String fileName : fileNameArray) {
			System.out.println(fileName);
		}
		
		System.out.println("=========================");
		
		// public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
		File[] fileArray = file.listFiles();
		for (File f : fileArray) {
			System.out.println(f.getName());
		}
	}
}

3.File类的练习

3.1 输出指定目录下指定后缀名的文件名称案例

需求:判断D:\\develop\\images目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称

代码如下:

package com.file;

import java.io.File;

/**
 * File练习:
 * 		判断D:\\develop\\images目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
 * 
 * @author HW
 *
 */
public class FileTest {
	public static void main(String[] args) {
		// 把D:\\develop\\images封装成一个File对象
		File file = new File("D:\\develop\\images");
		
		// 获取该目录下所有文件或文件夹的File数组
		File[] fileArray = file.listFiles();
		// 遍历该File数组,得到每一个File对象
		for (File f : fileArray) {
			// // 判断每个File对象是否是文件
			if(f.isFile()) {
				// 如果是文件,判断是否以后缀名.jpg结尾,如果以.jpg结尾,则输出该文件名称
				if(f.getName().endsWith(".jpg")) {
					System.out.println(f.getName());
				}
			}
		}
	}
}

3.2 文件过滤器改进输出指定目录下指定后缀名的文件名称案例  

需求:判断D:\\develop\\images目录下是否有后缀名为.jpeg的文件,如果有,就输出此文件名称。要求:使用文件名称过滤器改进!

  • public String[] list(FilenameFilter filter):
  • public File[] listFiles(FilenameFilter filter):
package com.file;

import java.io.File;
import java.io.FilenameFilter;

/**
 * File练习: 判断D:\\develop\\images目录下是否有后缀名为.jpeg的文件,如果有,就输出此文件名称 要求:使用文件名称过滤器改进
 * 
 * @author HW
 * 
 */
public class FileTest2 {
	public static void main(String[] args) {
		// 创建File对象,封装D:\\develop\\images目录
		File file = new File("D:\\develop\\images");

		// 获取该目录下满足条件的所有文件或文件夹的名称数组
		String[] fileNameArray = file.list(new FilenameFilter() {

			@Override
			public boolean accept(File dir, String name) {
				// System.out.println(dir + "----------" + name);
				// 根据一个File和一个文件/目录得到新的File对象
				File newFile = new File(dir, name);
				boolean flag = newFile.isFile();
				boolean flag2 = name.endsWith(".jpeg");
				return flag & flag2;
			}
		});
		
		// 遍历文件名称数组
		for (String fileName : fileNameArray) {
			System.out.println(fileName);
		}
	}
}

带文件名称过滤器的list()方法的执行过程如下:

3.3 批量修改文件名称案例

需求:修改"D:\\develop\\批量修改文件名称"目录下的视频名称。例如:把“Java基础视频_02_我爱学Java_File类的创建功能.avi”修改为“02_File类的创建功能.avi”

package com.file;

import java.io.File;

/**
 * 批量修改文件名称
 * 
 * @author HW
 * 
 */
public class FileTest3 {
	public static void main(String[] args) {
		// 创建File对象,封装"D:\\develop\\批量修改文件名称"目录
		File srcFolder = new File("D:\\develop\\批量修改文件名称");

		// 获取该目录下所有文件或文件夹的File数组
		File[] fileArray = srcFolder.listFiles();

		// 遍历该File数组,得到每一个File对象
		for (File f : fileArray) {
			// 得到每个file对象的名称,例如:Java基础视频_02_我爱学Java_File类的创建功能.avi
			String filename = f.getName();
			// 截取字符串"01"
			int startIndex = filename.indexOf("_");
			String numberString = filename.substring(startIndex + 1,
					startIndex + 3);

			// 截取字符串"_xml语言和作用.mp4"
			int endIndex = filename.lastIndexOf("_");
			String nameString = filename.substring(endIndex);

			// 拼接字符串
			String newName = numberString.concat(nameString);

			// 根据srcFolder和newName创建一个新的File对象
			File newFile = new File(srcFolder, newName);

			// 重命名
			f.renameTo(newFile);
		}
	}
}

效果图如下所示:

猜你喜欢

转载自blog.csdn.net/weixin_44679832/article/details/105379912