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

 

目录

1.File类的概述

1.1 File类的定义

1.2 File类的构造方法

2.File类的成员方法

2.1 创建功能

2.2 删除功能

2.3 重命名功能

2.4 判断功能

2.5 获取功能

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