【JavaSE学习笔记】IO流01_File

IO流01

File

1)概述

要学习IO流,就必须掌握硬盘上的路径形式

Java提供了一个File类

文件和目录路径名的抽象表示形式

2)构造方法

public File(String pathname):将该路径名称封装成了一个File实例

File(String parent, String child):将父文件夹或者目录里面的child文件封装成一个File实例(不常用)

FIle(File parent, String child):参数一:表示封装了File对象,该文件夹下的文件

import java.io.File;

public class Demo01 {
	public static void main(String[] args) {
		// 需求:封装e盘下的demo文件下面的a.txt文件:抽象表示
		File file1 = new File("E:\\demo\\a.txt");// 推荐使用

		File file2 = new File("E:\\demo", "a.txt");

		File file3 = new File("E:\\demo");
		File file4 = new File(file3, "a.txt");
	}
}

3)成员方法

public boolean createNewFile():表示创建文件,如果该文件存在,就不需要创建

public boolean mkdir():创建文件夹/目录,如果存在,就不需要创建

public boolean mkdirs():创建文件夹/目录,如果存在,就不需要创建(常用

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

public class Demo02 {
	public static void main(String[] args) {
		// 需求:在e盘下创建一个demo文件夹
		File file1 = new File("E:\\demo");
		// 如果没有,创建并返回true;如果文件夹存在,不用创建,返回false
		System.out.println("mkdir:" + file1.mkdir());

		// 需求:在e盘下demo文件夹下创建a.txt文件
		File file2 = new File("E:\\demo\\a.txt");
		try {
			// 如果没有,创建并返回true;如果文件存在,不用创建,返回false
			System.out.println("createNewFile:" + file2.createNewFile());
		} catch (IOException e) {// IOException:编译时期异常
			e.printStackTrace();
		}

		// 需求:在e盘下test文件夹下创建a.txt文件
		File file3 = new File("E:\\test\\a.txt");
		try {
			// 异常:系统找不到指定的路径。在E盘下找不到这个test
			System.out.println("createNewFile:" + file3.createNewFile());
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 创建文件夹/目录,如果不存在该目录,就创建!返回true
		File file4 = new File("e:\\test\\aaa\\bbb\\ccc\\ddd");
		System.out.println("mkdirs:" + file4.mkdirs());
	}
}

如果我们在写路径的时候,没有带盘符,那么默认是在你当前项目路径下!

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

public class Demo04 {
	public static void main(String[] args) {

		// 如果我们在写路径的时候,没有带盘符,那么默认是在你当前工程项目路径下!
		// 运行完刷新下工程
		File file1 = new File("a.txt");
		try {
			System.out.println("createNewFile:" + file1.createNewFile());
		} catch (IOException e) {
			e.printStackTrace();
		}

		File file2 = new File("aaa\\bbb\\ccc\\ddd");
		System.out.println("mkdirs:" + file2.mkdirs());
		
	}
}

刷新下工程


public boolean delete():删除此抽象路径名表示的文件或目录

import java.io.File;

public class Demo05 {
	public static void main(String[] args) {
		// 需求:删除aaa这个目录
		File file1 = new File("aaa\\bbb\\ccc\\ddd");
		// 不能删除带有内容的文件,只能逐个删除
		System.out.println("delete:" + file1.delete());
		
		File file2 = new File("aaa\\bbb\\ccc");
		System.out.println("delete:" + file2.delete());
	}
}


注意:java中的删除不走回收站;

delete不能删除该文件夹下有文件或者是文件夹的文件,只能删除空文件夹

public boolean renameTo(File dest):重命名

两个文件的路径一致的情况下:只是改名字

两个文件的路径不一致的情况下:不但改名,并且剪切(当前的盘符路径下)

import java.io.File;

public class Demo06 {
	public static void main(String[] args) {
		File file1 = new File("a.txt");

		File file2 = new File("b.txt");

		// 只该名称
		System.out.println("renameTo:" + file1.renameTo(file2));

		File file3 = new File("E:\\c.txt");

		// 改名并剪切到E:\\目录下
		System.out.println("renameTo:" + file2.renameTo(file3));
	}
}

4)判断功能

public boolean isAbsolute:判断该路径是否是绝对路径(带盘符)

public boolean isFile():判断此文件是否为一个标准文件

public boolean isHidden():判断此抽象路径表示的文件是否是一个隐藏文件

public boolean canRean():可读

public boolean canWrite():可写

import java.io.File;

public class Demo07 {
	public static void main(String[] args) {
		File file = new File("a.txt");// 相对路径(在工程目录下)

		System.out.println("isAbsolute:" + file.isAbsolute());// false
		System.out.println("isFile:" + file.isFile());// true
		System.out.println("isHidden:" + file.isHidden());// false
		System.out.println("canRead:" + file.canRead());// true
		System.out.println("canWrite:" + file.canWrite());// true
	}
}

5)获取功能

public String getAbsolutePath():获取绝对路径

public String getPath():获取相对路径

public String getName():获取文件或者目录的名称

public long length():获取文件的长度

public long lastModified():返回次抽象路径文件最后一次被修改的时间,返回的修改时间的一个毫秒值

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

public class Demo03 {
	public static void main(String[] args) {
		File file1 = new File("a.txt");// "\\" 代表"\"

		System.out.println("getAbsolutePath:" + file1.getAbsolutePath()); // getAbsolutePath:F:\JAVA\JavaSE\a.txt

		System.out.println("getPath:" + file1.getPath());// getPath:a.txt

		System.out.println("getName:" + file1.getName());// getName:a.txt

		// 没写数据,长度为0
		System.out.println("length:" + file1.length());// length:0

		// 最后一次修改的毫秒值
		System.out.println("lastModified:" + file1.lastModified());// lastModified:1502333228415

		// 转化为时间
		Date d = new Date(1502333228415L);// long类型要加L
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String s = sdf.format(d);
		System.out.println(s);// 2017-08-10 10:47:08
	}
}

6)高级功能

public String[] list():获取制定盘符下的所有文件以及文件夹的名称数组

import java.io.File;

public class Demo08 {
	public static void main(String[] args) {
		// 需求:要获取e盘下所有的文件以及文件夹名称
		// 将e盘的路径表现形式封装成一个File对象
		File file = new File("E:\\");
		
		String[] str = file.list();
		//遍历
		for (String s : str) {
			System.out.println(s);
		}
	}
}

public File[] listFiles():获取指定盘符下的所有文件以及文件夹的File对象数组(常用)

import java.io.File;

public class Demo09 {
	public static void main(String[] args) {
		// 需求:要获取e盘下所有的文件以及文件夹名称
		// 将e盘的路径表现形式封装成一个File对象
		File file = new File("E:\\");
		
		// 文件对象数组
		File[] fileArr = file.listFiles();
		// 是对象就要非空判断
		if (fileArr != null) {
			for (File f : fileArr) {
				// 直接输出f为全路径名称
				System.out.println(f.getName());
			}
		}
	}
}

7)练习

判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称

分析

a.将e盘封装成一个File对象

b.获取当前盘符下的所有的文件夹以及文件的File数组listFiles()

c.遍历之前,给File数组对象做一个非空判断,使用增强for遍历

d.获取到每一个文件以及文件夹

判断
是否是文件:isFile()

是否是以.jpg结尾的后缀名的文件,endWith(".jpg")
否:不搭理

e.输出就可以

import java.io.File;

public class Demo10 {
	public static void main(String[] args) {
		File file = new File("E:\\");

		File[] fileArray = file.listFiles();

		// 非空判断
		if (fileArray != null) {
			// 遍历
			for (File f : fileArray) {
				// 判断是否是文件
				if (f.isFile()) {
					// 判断是否以.jpg结尾
					if (f.getName().endsWith(".jpg")) {
						System.out.println(f.getName());
					}
				}
			}
		}
	}
}

8)文件过滤器

上一题中:当我们获取的时候,就已经有结果

要想实现这样一样结果,就必须学习一个接口:FilenameFileter

public File[] listFiles(FileFilter filter)

public String[] list(FilenameFiter fiter):(这个常用)

形式参数如果是一个接口对象:其实需要传递的是子实现类对象/匿名内部类

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

public class Demo11 {
	public static void main(String[] args) {
		File file = new File("E:\\");
		
		String[] strArray = file.list(new FilenameFilter() {
			
			@Override
			//File dir: 指定的文件
			//name: 文件名称列表
			public boolean accept(File dir, String name) {
				// File f = new File(dir, name);
				// // 是否是文件
				// boolean flag1 = f.isFile();
				// // 是否以.jpg结尾
				// boolean flag2 = name.endsWith(".jpg");
				// return flag1 && flag2;
				
				//匿名对象
				return new File(dir, name).isFile() && name.endsWith(".jpg");
			}
		});
		
		//遍历
		for (String s : strArray) {
			System.out.println(s);
		}
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值