黑马程序员——File类及其常见操作

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、File概述

File的英文释义是文件,顾名思义,File即是用于描述文件对象的一个包装类,封装了各种操作文件或者文件夹的方法供开发人员使用。

二、File类的常用方法
	File file = new File("C:\\hahaha.txt");//关联文件,把文件封装成对象
	
	//创建文件
	file.creatNewFile();//创建文件实体
	file.mkdir();//创建文件夹实体
	file.mkdirs();//创建多级目录文件夹实体
	
	//删除文件
	file.delete();
	file.deleteOnExit();//程序结束时删除文件
	
	//判断文件
	file.exists();    //文件是否存在
	file.isDirectory();//文件是否为文件夹
	file.isFile();     //文件是否为文件
	file.isHidden()
	file.isAbsolute()
	canExecute()      //是否可以执行
	canRead()
	canWrite()
	
	
	
	//获取文件信息
	file.length();
	file.listFiles();//当file为目录文件夹时
	file.getName()
	file.getParent();
	file.getPath();
	file.getAbsolutePath();//long
	file.lastModified()  //返回文件最后一次被修改的时间 long
	
	file.renameTo()
	
	//文件列表
	File.listRoots() //静态方法,返回File[] files,根盘符数组
	
	File f = new File("c:\\");
	f.list()   //返回的是File的名称,字符串。当f不是文件夹时返回null。
	f.list(FilenameFilter f) //返回所有限定条件的文件名,字符串。
	f.listFiles()  //返回的是File[] ,具体对象。
	


三、练习题

1列出E盘下某文件夹内的所有jtxt文件到控制台
package com.itheima;

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


class Demo{
	public static void main(String[] args){
		File f = new File("e:\\");//将文件夹封装成对象
		String[] str = f.list(new FilenameFilter(){ //调用带过滤器的list方法
			public boolean accept(File f,String s){
				return s.endsWith(".txt");
			}
		});
		for(int x=0;x<str.length;x++){    //将得到的文件名打印在控制台
			System.out.println(str[x]);
		}
	}
}


2列出一个目录下的所有内容,包括子目录的内容(带层次),到控制台。
package com.itheima;

import java.io.File;

class Demo{
	public static void main(String[] args){
	File dir =new File("e:\\360yasuo");
	showDir(dir,0);
	}
	
	//封装一个分级展示目录内容的方法
	public static void showDir(File dir,int level){
		System.out.println(method(level)+dir.getName());
		level++;
		File[] files=dir.listFiles();
		for(int x=0;x<files.length;x++){
			if(files[x].isDirectory())//如果目录下有文件夹,则递归,继续列出文件夹下的内容
				showDir(files[x],level);
			else{  //如果遍历到的是文件,则直接打印到输出台。
				System.out.println(method(level)+files[x].getName());
			}
		}
	}
	
	//封装一个用于分级的方法,分级的本质就是在字符串前面加空格
	public static String method(int level){
		StringBuilder sb = new StringBuilder();
		for(int x=0;x<level;x++){
			sb.append("  ");
		}
		return sb.toString();
	}
	

}

3删除带内容的目录
/*
 * 需求:删除e盘下1234文件夹及其所有内容
 */
package com.itheima;

import java.io.File;



class Demo{
	public static void main(String[] args){
		
		//把目标文件夹封装成对象 
		File dir = new File("e:\\3234");
		
		//对该文件夹进行删除操作
		deleDir(dir);
				
		
	}
	
	//封装一个用于删除文件夹及其内容的方法
	public static void deleDir(File dir){
		File[] files=dir.listFiles();
		for(int x=0;x<files.length;x++){ // 遍历文件夹中的内容
			if(files[x].isDirectory())   //如果是文件夹,则递归,继续删除操作
				deleDir(files[x]);
			else{                        //如果是文件,则直接删除
				files[x].delete();
			}
		}
		dir.delete();  //将空的目标文件删除
	}
}


4将指定目录下的所有文件的绝对路径名,存到一个文本文件中
/*
 * 需求:将e盘下1234文件夹的所有文件的绝对路径名,存到一个文本文件中
 * 思路:
 * 1.把1234文件夹封装成一个File对象
 * 2.利用file对象的操作方法得到绝对路径名
 * 3.利用输出流将路径名存到文本文件中
 */
package com.itheima;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


class Demo{
	public static void main(String[] args){
		
		//定义一个输出流对象缓冲区,提高数据传输效率
		BufferedWriter bufw =null;
		try
		{
			//定义输出流对象并关联到文本文件
			bufw =new BufferedWriter(new FileWriter("e:\\456.txt"));
			File dir =new File("e:\\1234");//把1234文件夹封装成对象
			File[] files=dir.listFiles();
			for(int x=0;x<files.length;x++){//遍历1234文件夹的内容
				String s =files[x].getAbsolutePath();
				bufw.write(s);    //将遍历到的文件的绝对路径写入文本文件
				bufw.newLine();
				bufw.flush();
			}
		}
		catch(IOException e)
		{
			throw new RuntimeException("生成文件失败");
		}
		finally   //关闭输出流
		{
			try{
				if(bufw!=null)
					bufw.close();
			}
			catch(IOException e){
				throw new RuntimeException("输出流关闭失败");
			}
		}
			
	}
	
}

四、存取配置文件
创建一个配置文件,用于记录软件使用的次数,如果使用次数达到5次,提示用户注册缴费。
/*
 * 需求:创建一个配置文件,用于记录软件使用的次数,如果使用次数达到5次,提示用户注册缴费。
 * 思路:
 * 1.在硬盘上创建一个文件用于记录信息
 * 2.创建输入流和输出流用于在内存和配置文件之间传递数据
 * 3.创建properties集合,读取配置文件信息
 * 4.在prop内更改信息并将更改后的结果保存到配置文件
 */
package com.itheima;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.Properties;



class Demo{
	public static void main(String[] args)throws Exception{
		
		//将配置文件封装成对象
		File f =new File("e:\\count.properties");
		if(!f.exists())
			f.createNewFile();
		FileInputStream fis = new FileInputStream(f);//创建一个输入流,用于读取配置文件
		Properties prop = new Properties();//定义一个集合,用于处理更改配置文件的信息
		prop.load(fis);//将配置文件的信息通过流加载进内存
		int count = 0;
		String value = prop.getProperty("times");
		if(value!=null)
			count = Integer.parseInt(value);
			if(count>=5)
				System.out.println("试用次数已到,请注册缴费");
		count++;
		prop.setProperty("times", count+"");//每用一次,在内存中更改使用次数
		FileWriter fw = new FileWriter(f);
	    prop.store(fw, "");//将更改后的使用次数保存到配置文件
	    fw.close();//关闭流
		
	}	
}


五、printWriter和printStream
打印流,输出流的一种,强大之处在于提供了println方法,能将各种数据原样打印出来。。。System.out中的out就是printStream的类对象。
printStream构造函数可以接收的参数类型:File对象,字符串路径,字节输出流。
printWriter构造函数可以接收的参数类型:File对象,字符串路径,字节输出流,字符输出流。

六、合并文件和切割文件
 
/*
 * 需求:将e盘下的txt文件合并到一个文本文件中
 * 思路:
 * 1.利用SequenceInputStream合并输入流
 * 2.创建一个输出流,将数据写到指定文本文件中
 */
package com.itheima;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

class Demo{
	public static void main(String[] args)throws IOException{
		
		//创建集合vector ,用于生成Enumeration参数
		Vector v = new Vector();
		v.add(new FileInputStream("e:\\1.txt"));
		v.add(new FileInputStream("e:\\2.txt"));
		v.add(new FileInputStream("e:\\3.txt"));
		Enumeration e = v.elements();
		
		//将三个输入流合成一个流
		SequenceInputStream sis = new SequenceInputStream(e);
		BufferedInputStream bufis =new BufferedInputStream(sis);
		
		//创建一个输出流,用于往目的存储数据
		FileOutputStream fos = new FileOutputStream("e:\\4.txt");
		BufferedOutputStream bufos = new BufferedOutputStream(fos);
		int by = 0;
		while((by=sis.read())!=-1){//循环读取和写入,完成存储
			bufos.write(by);
		}
		
		//关闭流
		sis.close();
		bufos.close();	
	}
}


/*
 * 需求:将e盘下的1.jpg文件切割成三部分
 * 思路:
 * 1.创建一个字节读取流,用于读取文件数据
 * 2.每读取一部分就放到byte[]中,此时再创建输出流并把数据写入文件
 */
package com.itheima;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;



class Demo{
	public static void main(String[] args)throws IOException{
		
		//创建字节输入流,并关联到文件
		FileInputStream fis= new FileInputStream("e:\\1.jpg");
		BufferedInputStream bufis = new BufferedInputStream(fis);
		
		//定义缓冲区字节数组
		byte[] buf = new byte[1024*512];
		int len =0;
		int count =1;
		while((len=bufis.read(buf))!=-1){ //循环读取源文件
		
			//输入流每装满一次缓冲区,就创建一个输出流来接收缓冲区数据
			FileOutputStream fos = new FileOutputStream("e:\\"+(count++)+".part");
			BufferedOutputStream bufos = new BufferedOutputStream(fos);
			bufos.write(buf, 0, len);
			bufos.close();
		}
		
		//关闭读取源文件的输入流
		bufis.close();
	}
}
	


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击新增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值