IO流复习总结(一) IO、File类

IO

Input:输入,从持久设备到内存;Output:输出,从内存到持久设备

 

File

我们学习IO目的就是实现内存和持久设备(硬盘)之间的数据交互。有一个问题:硬盘上都有什么?文件和文件夹。我们要学习IO,实现与硬盘交互,很明显最终数据一定是写在某个文件夹下的某个文件中。程序中要与文件交互,Java是面向对象的语言,必须对文件和文件夹也用对象来描述。描述文件和文件夹的就是File类。

 

File类的构造函数

 *     public File(String pathname) 根据文件或文件夹的路径名封装一个File对象
 *     public File(String parent,String child) 根据父目录的路径名和儿子的名称封装一个File对象
 *     public File(File parent,String child) 根据父目录的File对象和儿子的名称封装一个File对象

 * 注意:File类代表的是文件或目录的路径名的抽象表示形式,因此对应的文件不一定存在的!

public static void main(String[] args) {
	// public File(String pathname) 根据文件或文件夹的路径名封装一个File对象
	File file = new File("D:\\test\\1.txt");
	System.out.println(file);
		
	// public File(String parent,String child) 根据父目录的路径名和儿子的名称封装一个File对象
	File file2 = new File("D:\\test","1.txt");
	System.out.println(file2);
		
	// public File(File parent,String child) 根据父目录的File对象和儿子的名称封装一个File对象
	File parent = new File("D:\\test");
	File file3 = new File(parent,"1.txt");
	System.out.println(file3);
}

运行结果:

 

File类的创建功能

 *     public boolean createNewFile() 创建文件,如果不存在才创建,并且返回true;如果存在返回false
 *     public boolean mkdir() 创建文件夹,如果不存在才创建,并且返回true;如果存在返回false
 *     public boolean mkdirs() 创建目录,如果父目录中有不存在的,一并创建。
 *
 * 注意:
 *     A:如果创建文件时,父目录不存在,会抛出异常!
 *     B:创建文件夹时,如果父目录不存在,不抛异常,返回false
 *     C:创建文件或文件夹时,我们要注意必须调用对应的方法。否则:
 *                 名字叫jpg的不一定是图片,也有可能是文件夹!
 *     D:相对路径和绝对路径
 *         绝对路径:带有根目录的路径,明确指向某一个固定的位置。
 *         相对路径:不带根目录的路径,无法确定一个具体的位置。相对于一个位置的路径
 *         在我们IO中,如果使用相对路径,都是相对于当前项目所在路径
 *         所以,如果我们使用相对路径,创建文件或文件夹,会创建到当前项目目录下

public static void main(String[] args) throws IOException {
        // 需求:创建D:\\test\\1.txt
        File file = new File("D:\\test\\1.txt");
	// public boolean createNewFile() 创建文件
	System.out.println(file.createNewFile());
		
	// 创建文件夹 D:\\demo
	File file3 = new File("D:\\demo");
	System.out.println(file3.mkdir());
		
	// 需求:创建 D:\\aaa\\bbb\\ccc
	File file4 = new File("D:\\aaa\\bbb\\ccc");
	System.out.println(file4.mkdir());
	System.out.println(file4.mkdirs());
		
	// 需求:创建D:\\test\\2.jpg
	File file5 = new File("D:\\test\\2.jpg");
	System.out.println(file5.mkdir());
		
	File file6 = new File("3.txt");
	System.out.println(file6.createNewFile());
	
	File file7 = new File("demo");
	System.out.println(file7.mkdir());
}

运行结果:

 

File类的删除方法

 *    boolean delete() 删除此抽象路径名表示的文件或目录
  注意:
 *     A:java的删除不走回收站。
 *     B:如果文件夹下还有儿子,我们就不能直接删除。必须先删除儿子

public static void main(String[] args) throws IOException {
	// 需求:我创建一个demo\\aaa\\bbb
	File file = new File("demo\\aaa\\bbb");
	System.out.println(file.mkdirs());
	// 需求:在创建一个demo\\aaa\\2.txt
	File file2 = new File("demo\\aaa\\2.txt");
	System.out.println(file2.createNewFile());
	
	// 演示删除功能:
	// boolean delete() 删除此抽象路径名表示的文件或目录 
	// 需求:删除3.txt
	File file3 = new File("3.txt");
	System.out.println(file3.delete());
	
	// 需求:删除demo\\aaa\\bbb
	File file4 = new File("demo\\aaa\\bbb");
	System.out.println(file4.delete());
	
	// 需求删除demo
	File file5 = new File("demo");
	System.out.println(file5.delete());
}

运行结果:

 

 

File类的判断功能

 *     public boolean isDirectory() 判断是否是文件夹
 *     public boolean isFile() 判断是否是文件
 *     public boolean exists() 判断是否存在
 *     public boolean canRead() 判断是否可读
 *     public boolean canWrite() 判断是否可写
 *     public boolean isHidden() 判断是否隐藏

public static void main(String[] args) {
	File file = new File("D:\\test\\制服诱惑.avi");
		
	System.out.println("isDirectory:" + file.isDirectory());// false
	System.out.println("isFile:" + file.isFile());// true 
	System.out.println("exists:" + file.exists());// true
	System.out.println("canRead:" + file.canRead());// true
	System.out.println("canWrite:" + file.canWrite());// false
	System.out.println("isHidden:" + file.isHidden());// true
}

 

File类的重命名功能

 *     public boolean renameTo(File dest) 把当前File对象文件重命名为指定的dest
 * 注意:
 *     A:源和目标在一个目录下,重命名
 *     B:源和目标不在一个目录,剪切 + 重命名

public static void main(String[] args) {
	// 需求:重命名 D:\\test\\ly.jpg 为  柳岩.jpg
	// 封装源文件的File对象
	File src = new File("D:\\test\\ly.jpg");
	// 封装目标文件的File对象
	File dest = new File("柳岩.jpg");
	// 重命名
	System.out.println(src.renameTo(dest));// true
}

 

File类的基本获取功能

 *     public String getAbsolutePath() 获取绝对路径
 *     public String getPath() 获取的是,创建File对象时传递的路径
 *     public String getName() 获取名称
 *     public long length() 获取文件的字节个数
 *     public long lastModified() 获取最后修改的时间,返回的是毫秒值

public static void main(String[] args) {
	// 封装File对象
	File file = new File("demo\\aaa\\2.txt");
		
	System.out.println("getAbsolutePath: " + file.getAbsolutePath());// E:\workspace\demo\aaa\2.txt
	System.out.println("getPath: " + file.getPath());// demo\aaa\2.txt
	System.out.println("getName: " + file.getName());// 2.txt
	System.out.println("length: " + file.length());// 5
	System.out.println("lastModified: " + file.lastModified());// 1483092042410
		
	long time = file.lastModified();
	Date date = new Date(time);
	System.out.println(date.toLocaleString());// 2018-11-25 10:47:22
}

 

File类的高级获取功能

* 需求:扫描D:\\test下的所有子文件和子文件夹,并且打印绝对路径
*     String[] list() 获取当前目录下的所有儿子的名称的数组
*     File[] listFiles() 获取当前目录下的所有儿子File对象的数组
* 思路:
*     A:封装父文件夹的File对象
*     B:获取父目录下的所有儿子的数组
*     C:循环遍历,获取每一个儿子
*     D:打印绝对路径
*
* 注意:调用这两个方法的必须是文件夹,不能是文件!否则返回null

public static void main(String[] args) {
	// A:封装父文件夹的File对象
	File parent = new File("D:\\test");
	// B:获取父目录下的所有儿子的数组
	// String[] list() 获取当前目录下的所有儿子的名称的数组
	String[] names = parent.list();
	// C:循环遍历,获取每一个儿子的名称
	for( String name : names){
		// 如果我获取了儿子的File对象,就可以获取儿子的绝对路径
		// 封装儿子的File对象
		File file = new File(parent,name);
		// D:打印绝对路径
		System.out.println(file.getAbsolutePath());
	}
	// 封装父目录的File对象
	File parent2 = new File("D:\\test");
	// 获取父目录下的所有儿子的File数组
	File[] files = parent2.listFiles();
	// 循环遍历,取出每个儿子的File对象
	for( File file : files){
		// 打印绝对路径
		System.out.println(file.getAbsolutePath());
	}

	File file = new File("柳岩.jpg");
	String[] arr = file.list();
	System.out.println(arr);// null
}

 

File类应用演示

演示:过滤D:\\下,以及子目录中扩展名是.jpg的文件,输出其绝对路径

// 递归扫描文件夹的方法
public static void scanFolders(File dest) {
	// 判断传进来的是否是文件夹
	if(dest.isFile()){
		throw new RuntimeException("哥们,不要给我传文件,我只扫文件夹!");
	}
	// B:获取目标文件夹下的所有儿子的数组
	File[] files = dest.listFiles();
	// 这里高级for报空指针,一定是files为null。那么为什么会是null?
	// 这里有一个特殊现象:如果一个文件夹,我们没有访问的权限,那么也会返回null
	// 如果无权限,我们无法解决,只能跳过
	if( files != null){
		// C:循环遍历,取出每个儿子
		for( File file : files){
			// D:判断是否是文件夹
			if( file.isDirectory()){
				// 是:回到步骤B
				scanFolders(file);
			}else{
				// 否:判断是否是jpg文件
				if( file.getName().endsWith(".jpg")){
					// 是:打印绝对路径
					System.out.println(file.getAbsolutePath());
				}
			}
		}
	}
}

测试:

public static void main(String[] args) {
	// A:封装目标文件夹的File对象
	File dest = new File("D:\\");
	// 调用递归扫描方法
	scanFolders(dest);
}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值