Java IO(一)之File类


人们日常生活需要生活用水,那么,水从哪里来呢?我们的生活用水需要一个很大的水工厂,水工厂通过各种大小水管将生活用水运输到我们的社区,我们开一下水龙头就可以用瓢子装水用了。想起来我以前看过的电影,如果刚好你的社区生活用水缺乏,你只能用盘,桶或者其他器皿装水了,然后抬回家去。

我要说什么呢?这跟IO流有什么关系呢?

如果我们把水当做文件,把水工厂当做file,将运输用的大小水管当做inputstream,outputstream,reader,writer,再把瓢子,盘,水桶等容器当做数组,char等。file类是可以放很多很多的水的大仓库,通过inputstream,outputstream,reader,writer这四个节点流(=水管),将水运输到社区,最后,用不同容器(=数组,char)将水装出来用。

你问我为什么要用这个例子作比喻?因为这跟我们的文件处理很相似,在生活中,如果你要用水,会不会去遥远的自来水工厂取水?好吧,你说你家附近就有一家自来水工厂,不远。但是你确定你能直接进去取水用?不嫌麻烦?就算你不想麻烦,但是人家自来水供应商会给你直接接触整个工厂的自来水吗?答案是不会,因为人家也是有严格地按照国家标准执行的。万一你靠近自来水工厂的自来水,投毒进去谁负责任啊。另外一个,为了管理,为了人们的用水方便,只能是将水通过一个大水管到各大社区,然后社区各家各户接一根小的水管到家。

同样的,file类也是一样的,创建了一个file类的对象后,你不可能直接对file的对象进行操作。只能通过inputstream,outputstream,reader,writer这四个水管将文件包装运输,人们用char或者数组等容器从水管中读取数据。

File类

注:可能有如下三种情况:文件、文件夹、不存在的文件或文件夹

要知道的:在计算机里面的文件是存储在硬盘上,Java虽然需要和文件打交道,但是它是不可以直接对硬盘进行操作,而是通过虚拟机和我们的操作系统进行交互,所以File代表的是Java和文件的一种联系。因此这个文件可能存在也可能不存在,它是只是一个抽象的概念。

File对象的构建

//File f = new File(String path);直接构建
File f1 = new File("E:/java笔记/java导读.png");
//File f = new File(String parent,String child);父子构建
File f2 = new File("E:/java笔记","java导读.png");
//File f = new File(File p , String c);父对象子名称
File f3 = new File(new File("E:/java笔记"),"java导读.png");

File文件名、路径的获取

/**
* 获取File对象的名称
* String name = f.getName();
* 获取File对象的路径
* String path = f.getPath();构建File对象若使用的是相对路径则返回相对路径反之返回绝对路径
* String path = f.getAbsolutePath();返回File对象的绝对路径
* String path = f.getPatent();返回File对象父级路径,如果没有则返回null
*/

String name = f1.getName();
System.out.println("f1的name:"+ name);//f1的name:java导读.png
String path = f1.getPath();
System.out.println("f1的path:"+path);//f1的path:E:\java笔记\java导读.png
String pathParent = f1.getParent();
System.out.println("f1的parent路径:"+pathParent);//f1的parent路径:E:\java笔记

文件的状态

/**
* 判断文件的状态
* f.exists();
* f.isFile();
* f.isDirectory();
 */

boolean exist = f1.exists();
System.out.println("f1是否存在:"+exist);//f1是否存在:true
boolean isFile = f1.isFile();
System.out.println("f1是否是文件:" + isFile);//f1是否是文件:true
boolean isDirectory = f1.isDirectory();
System.out.println("f1是否是文件夹:" + isDirectory);//f1是否是文件夹:false

文件的其他操作

/**
 * 其他的信息
* long s = f.length();返回的文件的字节数,当为0是有两种情况:一:文件字节数为0;二:是文件夹
* Boolean b = file.createNewFile();当文件不存在是才创建成功
* Boolean b = file.delete();删除已经存在的文件
*/
System.out.println("f1的文件的字节数:"+ f1.length());
File newFile = new File("E:/java笔记/1.txt");
boolean isCreate = newFile.createNewFile();
System.out.println("是否创建成功:"+isCreate);
boolean delete = newFile.delete();
System.out.println("是否删除成功:"+delete);

创建文件夹

/**
* 创建文件夹:
* boolean b = f.mkdir();必须确保上级目录存在,否则创建失败
* boolean b = f.mkdirs();上级目录可以不存在,不存在则一同创建。
*/
File file = new File("E:/java笔记/mkdirTest");
boolean ismkdir = file.mkdir();
System.out.println("file创建目录是否成功:"+ ismkdir);
File file1 = new File("E:/java笔记/Test/mkdirsTest");
boolean ismkdirs = file1.mkdirs();
System.out.println("file2创建多级目录是否成功:"+ ismkdirs);

列出下一级

实战练习1:列出子孙级目录及名称

思路分析:

思路分析图:


/**
 * @描述:递归打印子孙级目录和文件的名称
 */
public class fileList {
	public static void main(String[] args) {
		File file = new File("E:/Linux笔记");
		printName(file,1);
	}
	/**
	 * 
	 *@描述:打印
	 * @param f 要进行显示的File对象
	 * @param count 控制显示的格式
	 */
	public static void printName(File f, int count){
        //控制显示格式
		for(int i = 0; i < count; i++){
			System.out.print("-");
		}
        //打印
		System.out.println(f.getName());
        //递归头
		if(f == null || !f.exists()){
			return;
		}else if(f.isDirectory()){
			File[] lists = f.listFiles();
			for(File listFile : lists){
                //递归体
				printName(listFile,count+1);
			}
		}
	}
}
/*
*bank
*-Account.java
*--Bank.java
*---CheckingAccount.java
*----Customer.java
*-----SavingAccount.java
*------TestBanking.java
*/

实战练习2:列出文件及其子孙文件的总大小

注意:在判定file对象存在并且不为空的情况下还有判定file是文件才可以计算大小,文件夹是没有的大小。(所谓“文件夹的大小也是有文件夹里面的文件的总大小”)。

思路导图:

	/**
	 * 
	 *@描述:计算文件内容的大小(也就是计算总文件的大小)
	 * @param file
	 */
	public class list {
		public static void main(String[] args) {
			File file = new File("E:\\Java workspace\\exercise");
			countLength(file);
			System.out.println(length);
	}

	private static long length = 0;
	public static void countLength(File file){
		//判断File对象是否存在
		if(file != null && file.exists()){
			//存在:判断File对象是否是文件(只有是文件的情况下才能计算大小,目录是没有大小的)
			if(file.isFile()){
			length +=file.length();
			}else{
				//File对象存在但是不是文件:当File为目录,遍历其子孙并统计大小
				File[] files = file.listFiles();
				for(File f :files){
					countLength(f);
				}
		}
		
	}
}

实战练习2_1:利用面向对象的思想计算文件夹的大小

思维导图:

public class countDir {
		//存放目录文件的大小
		long length = 0;
		//文件的路径
		String path ;
		//构建File对象
		File file ;
		//初始化构造器
		public countDir(String path) {
			this.path = path;
             //初始化源
			this.file = new File(path);
             //计算大小
			count(this.file);
		}
		/**
		 * @return the length
		 */
		public long getLength() {
			return length;
		}
	/**
	 * 
	 *@描述:计算File对象大小
	 * @param file
	 */
	public static void main(String[] args) {
		countDir test = new countDir("E:/Java workspace/exercise/src/bank");
		System.out.println("文件夹的大小为:"+test.getLength());
	}

	private void count(File file) {
		if(file != null && file.exists()){
			if(file.isFile()){
				length += file.length();
			}else{
				File[] files = file.listFiles();
				for(File f : files){
					count(f);
				}
			}
		}	
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人类社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的发展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人类的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油类物质(石油类物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康带来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油类物质对水体和土壤的污染的治理。对于水中油含量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油类污染物含量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红外光度法技术,开发研制具有自主知识产权的适合国情的适于野外便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物含量,为我国众多的环境检测站点监测水体的油污染状况提供依据。
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值