Java学习笔记(43)—— IO——File

这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。


一、File

1.1 概述

  • 可封装一个磁盘路径字符串,路径具体包括:

文件路径,如 d:/abc

文件夹路径,如 d:/a.txt

不存在的路径,如 k:/dsa/ewq

  • File 提供了对文件或文件夹的一些操作方法
  • 创建对象

new File("d:/abc/a.txt")

new File("d:/abc", "a.txt")

1.2 方法

  • 文件或文件夹属性

length() ——获取文件大小字节量,对文件夹无效

getName() ——获取文件名

getParent() ——获取父目录

getAbsolutePath() —— 获取完整路径(绝对路径)

getLastModified()——获取最后修改时间,毫秒值

isFile() ——判断是否是文件

isDirectory() ——判断是否是文件夹

exists() ——判断是否存在

  • 创建、删除文件或文件夹

createNewFile() ——新建文件。若文件已经存在,不新建,返回false;若路径文件夹不存在,会出现异常

mkdirs() ——创建多层目录

delete() ——删除文件,或删除空目录

  • 目录列表

list() —— 获得 String[] 数组,以字符串形式存放文件、目录名字,例如:

                ["a.txt", "b.jpg", "abc"]

listFiles() —— 获得 File[] 数组,存放文件、目录的封装对象。对文件、不存在的路径、无权进入的目录,列表方法返回 null。

1.3 练习:File属性方法测试

package IO_File测试;

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

public class Test1_IO_File属性方法测试 {
	public static void main(String[] args) {
		// 路径变量
		String path;
		
		path = "D:\\Students.txt";// 存在的文件
//		path = "D:\\JavaLearningProjects\\day01";// 存在的文件夹
//		path = "D:\\tools\\feiq\\ServesDocument";// 不存在的路径
	
		File file = new File(path);
		System.out.println("名字:"+file.getName());
		System.out.println("父目录"+file.getParent());
		System.out.println("完整目录(绝对路径)"+file.getAbsolutePath());
		System.out.println("是否存在"+file.exists());
		System.out.println("是否文件"+file.isFile());
		System.out.println("是否文件夹"+file.isDirectory());
		System.out.println("字节量(文件夹无效)"+file.length());
		System.out.println("最后修改时间"+file.lastModified());
		// 用Date封装,可以按惯用格式查看时间
		Date date = new Date(file.lastModified());
		System.out.println("最后修改时间"+date.toString());
	}
}

1.4 练习:文件与文件夹的创建与删除

package IO_File测试;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Test2_文件与文件夹的创建与删除 {
	public static void main(String[] args) throws Exception {
		/*
		 *	代码拟实现的流程:
         *  新建D盘abc/aa目录;
		 *	新建D:/abc/aa/f1文件
		 *	删除f1文件
		 *	删除D:/abc/aa目录
		 */
		System.out.println("按回车执行!");
		new Scanner(System.in).nextLine();
		/* dir在此指代的是aa的路径,所以其操作不会删除abc */
		File dir = new File("d:/abc/aa");
		dir.mkdirs();// 根据file对象的构造时的路径,逐层创建多个文件夹;
		// mkdir创建一层文件夹
		System.out.println("多次文件夹已创建!");
		
		System.out.println("按回车执行!");
		new Scanner(System.in).nextLine();
		// File(path, filename)创建的File对象路径为path,文件名字为filename
		File file = new File(dir, "f1");
		file.createNewFile();// 创建指定路径下指定名字的文件
		System.out.println("制定路径下的文件创建!");
		
		System.out.println("按回车执行!");
		new Scanner(System.in).nextLine();
		file.delete();
		System.out.println("f1文件被删除");

		System.out.println("按回车执行!");
		new Scanner(System.in).nextLine();
		dir.delete();// dir调用了delete,只删除了一层目录
		System.out.println("aa文件夹被删除");
	}
}

1.5 练习:目录列表

package IO_File测试;

import java.io.File;
import java.util.Arrays;
import java.util.Scanner;

public class Test3_目录列表 {
	public static void main(String[] args) {
		System.out.println("输入文件夹:");
		String s = new Scanner(System.in).nextLine();
		File dir = new File(s);

		if (!dir.isDirectory()) {// 判断输入是否为文件夹路径
			System.out.println("请输入正确的文件夹!");
			return;
		} else {
			// 目录文件夹的字符串名称,本质是String[]
			String[] names = dir.list();
			/* 对文件、不存在的路径、无权访问的目录,不能列表 */
			if (names == null) {
				System.out.println("对文件、不存在的路径、无权访问的目录,不能列表");
				return;
			}
			System.out.println(Arrays.toString(dir.list()));
			// 目录文件夹的File对象,本质是File[]
			File[] files = dir.listFiles();
			System.out.println(Arrays.toString(dir.listFiles()));

			// 遍历显示names数组信息
			for (String n : names) {
				System.out.println(n);// 只打印显示了文件名
			}

			// 遍历显示files数组信息
			for (File f : files) {
				System.out.println(f.getName() + "-" + f.length());
			}
		}
	}
}

1.6 练习:获得文件夹的总大小

package IO_File测试;

import java.io.File;
import java.util.Scanner;

public class Test4_获得文件夹的总大小 {
	public static void main(String[] args) {
		System.out.println("输入文件夹:");
		String s = new Scanner(System.in).nextLine();
		File dir = new File(s);

		if (!dir.isDirectory()) {// 判断输入是否为文件夹路径
			System.out.println("请输入正确的文件夹!");
			return;
		}
		long size = dirLength(dir);
		System.out.println("dir目录下文件总大小为:"+size);
	}

	
	private static long dirLength(File dir) {
		long sum = 0;// sum存储所有文件的length
		File[] files = dir.listFiles();
		
		if(files==null) {
			System.out.println(dir);// 打印返回Null的文件或文件夹
			return 0;
		}
		
		for(File f : files) {
			if(f.isFile()) {// f是文件
				sum+=f.length();
			}else {// f是文件夹,递归调用自己
				sum+=dirLength(f);
			}
		}
		return sum;	
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值