java之20天 File对象(二)

本文介绍如何在Java中实现文件的递归遍历、指定后缀文件的过滤及删除,同时展示了如何管理和读取属性文件来跟踪应用程序的使用次数。
过滤获取指定后缀的文件
输出文件目录列表
递归
删除文件



import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * File 获取
 * String[] list():获取指定目录中的所有文件和目录的名称
 * String[] list(FileNameFilter fnf): 获取指定目录中,过滤后的文件 或目录名称
 * File[] listFiles():获取指定目录下的所有文件 和 目录对象  
 * 
 * --递归---
 * 需求:
 * 列出制定目录下的文件或者文件夹,包含子目录中的内容,也就是列出指定目录下的所有内容.
 * 
 * 因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可.函数 中 还需要调用自己,这样我们就称为 "递归"
 * 递归要注意点的是 
 *  1.限定条件
 *  2.注意递归的次数,尽量避免内存溢出
 *  
 * ---删除一个带内容的目录--- java删除是不走回收站,注意确定
 * 删除的原理
 * 在window中,删除目录从里面往外删除.
 * 既然是从里往外删除,就需要用到递归了.  
 * 
 * ---建立指定目录下的java文件的绝对路径,存储到一个文本文件
 * 建议一个java文件列表文件
 * 
 * 思路:
 *   1.对指定的目录进行递归
 *   2.获取递归过程素有的java文件路径
 *   3.将这些路径存储的到指定的集合中
 *   4.将集合中的数据写入如到一个文件中.
 *
 */
public class FileDemo2 {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		System.out.println("========过滤查找===========");
		//acceptFile();
		//listFile();
		System.out.println("========遍历所有文件和目录===========");
		/*File dir=new File("D:\\明天");
		showDir(dir,0);*/
		System.out.println("========递归===========");
		//toBin(6);   还需要逆转 输出
		//toBin_1(6);
		//getSum(3);  //6
		
		/*System.out.println("========删除文件===========");
		File dir=new File("E:\\kankan");
		removeDir(dir);*/
		
		File dir=new File("D:\\me");
		List<File> list=new ArrayList<File>();
		fileToList(dir,list);
		System.out.println(list.size());
		File file=new File(dir,"javaList.txt");
		writeToFile(list,file.toString());
	}
	public static void fileToList(File dir,List<File> list){
		File [] files=dir.listFiles();
		for(File file:files){
			if(file.isDirectory())
				fileToList(file,list);
			else{
				if(file.getName().endsWith(".txt"))
					list.add(file);
			}
				
		}
	}
	
	public static void writeToFile(List<File> list,String javaListFile) throws IOException{
		BufferedWriter bufw=null;
		try{
			bufw=new BufferedWriter(new FileWriter(javaListFile));
			for(File f:list){
				String abspath=f.getAbsolutePath();
				bufw.write(abspath);
				bufw.newLine();
				bufw.flush();
			}
		}catch(IOException e){
			throw e;
		}finally{
			try{
				if(bufw!=null)
					bufw.close();
			}catch(IOException e){
				throw e;
			}
		}
		
	}
	
	//删除文件
	public static void removeDir(File dir){
		File[] files=dir.listFiles();
		for (File file : files) {
			//不是隐藏 并且还是目录
			if(!file.isHidden()&&file.isDirectory())
				removeDir(file);
			else
				System.out.println(file.getName()+"::"+file.delete());
		}
		System.out.println(dir.getName()+"::dir::"+dir.delete());
	}
	
	
	//求和 
	public static int getSum(int n){
		if(n==1)
			return 1;
		return n+getSum(n-1);
	}
	//现在 采用 递归
	public static void toBin_1(int num){
		if(num>0){
			toBin_1(num/2);
			System.out.print(num%2);
			
		}
	}
	
	//以前转二进制 
	public static void toBin(int num){
		while(num>0){
			System.out.print(num%2);
			num=num/2;
		}
	}
	
	
	/**
	 * 列出所有目录结构
	 */
	public static void showDir(File dir,int space){
		getLever(space);
		System.out.println(dir);
		space++;
		File[] file=dir.listFiles();
		for(File f:file){
			if(f.isDirectory())
				showDir(f,space);
			else{
				getLever(space);
				System.out.println(f.getName());
			}
			
		}
	}
	
	private static void getLever(int space){
		for (int i = 0; i < space; i++) {
			System.out.print("  ");
		}
		System.out.print("|--");
	}
	

	/**
	 * 获取目录下的所有文件对象 ,这样可以进行其他的操作
	 * 如果使用list() 只能获取文件和目录的名称
	 */
	public static void listFile(){
		File dir=new File("c:\\");
		File[] files=dir.listFiles();
		for(File f:files){
			System.out.println(f.getName()+"::"+f.length());
		}
	}
	
	/**
	 * 过滤制定文件夹中的 指定的后缀名的文件
	 */
	public static void acceptFile(){
		File dir=new File("C:\\");
		String[] arr=dir.list(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				return name.endsWith(".jpg");
			}
		});
		
		System.out.println(arr.length);
		for(String name:arr){
			System.out.println(name);
		}
		
		
	}
	
	
}



属性文件的读取和输出


/**
 * Properties是hashTable的子类
 * 也就是说他是具备Map集合的特点,而且他里面存储的都是字符串.
 * 
 * 是集合中和IO技术相结合的集合容器
 * 该对象的特点是:可以使用键值对形式的配置文件.
 * 
 * 
 * 需求:
 *   用于记录应用程序运行的次数
 *   如果使用次数已到,那么给出注册提示
 *   
 *   很容易想到计数器:
 *   可是该计数器定义在应用程序中,随着程序的运行而在内存中存在,并进行自增.
 *   可是随着该应用程序的退出,该计数器也在内存中消失了,程序下次启动又重新开始从0计数了.
 *   
 *   
 *   
 */
public class PropertiesDemo {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//setAndGet();
		System.out.println("========自定义方法加载文件到properites中===========");
		//method_1();
		System.out.println("========使用字节流加载数据到===========");
		//loadDemo();
		
		System.out.println("========注册使用次数的控制============");
		useTimes();
	}
	//模拟 注册
	public static void useTimes() throws IOException{
		Properties prop=new Properties();
	
		File file=new File("E:\\count.ini");
		if(!file.exists())
			file.createNewFile();
		FileInputStream fis=new FileInputStream(file);
		prop.load(fis);
		String value=prop.getProperty("time");
		int count=0;
		if(value!=null){
			count=Integer.parseInt(value);
			if(count>=5){
				System.out.println("您好,使用次数已到,拿钱!");
				return;
			}
		}
		count++;
		prop.setProperty("time", count+"");
		
		FileOutputStream fos=new FileOutputStream(file);
		prop.store(fos, "");
		fos.close();
		fis.close();
	}
	
	
	//loadDemo
	// 加载 字节流 都是早期的,加载 字符流 1.6 才开始.
	public static void loadDemo() throws IOException{
		Properties prop=new Properties();
		FileInputStream fis=new FileInputStream("E:\\info.txt");
		prop.load(fis);
		fis.close();
		System.out.println(prop);
		prop.list(System.out);
		prop.setProperty("wangwu", "39");
		
		FileOutputStream fos=new FileOutputStream("E:\\info.txt");
		prop.store(fos, "author");
		fos.close();
		
	}
	
   /**
    * 演示,如果将流中的数据存储到集合中.
    * 将要将Info.txt中的键值对数据存储到集合中进行操作.
    * @throws IOException 
    */
	public static void method_1() throws IOException{
		BufferedReader bufr=new BufferedReader(new FileReader("E:\\info.txt"));
		
		Properties prop=new Properties();
		String line=null;
		while((line=bufr.readLine())!=null){
			String[] arr=line.split("=");
			//System.out.println(arr[0]+"..."+arr[1]);
			prop.setProperty(arr[0], arr[1]);
		}
		bufr.close();
		System.out.println(prop);
	}
	
	
	//设置和获取元素
	public static void setAndGet(){
		Properties prop=new Properties();
		
		prop.setProperty("zhangsan", "30");
		prop.setProperty("lisi", "39");
		
		System.out.println(prop);
		prop.setProperty("lisi", "89");
		String value=prop.getProperty("lisi");
		System.out.println(value);
		
		Set<String> names=prop.stringPropertyNames();
		for(String s:names){
			System.out.println(s+":"+prop.getProperty(s));
			
		}
		
		
		
		
	}
}
内容概要:本文详细介绍了一种基于Simulink的表贴式永磁同步电机(SPMSM)有限控制集模型预测电流控制(FCS-MPCC)仿真系统。通过构建PMSM数学模型、坐标变换、MPC控制器、SVPWM调制等模块,实现了对电机定子电流的高精度跟踪控制,具备快速动态响应和低稳态误差的特点。文中提供了完整的仿真建模步骤、关键参数设置、核心MATLAB函数代码及仿真结果分析,涵盖转速、电流、转矩和三相电流波形,验证了MPC控制策略在动态性能、稳态精度和抗负载扰动方面的优越性,并提出了参数自整定、加权代价函数、模型预测转矩控制和弱磁扩速等优化方向。; 适合人群:自动化、电气工程及其相关专业本科生、研究生,以及从事电机控制算法研究与仿真的工程技术人员;具备一定的电机原理、自动控制理论和Simulink仿真基础者更佳; 使用场景及目标:①用于永磁同步电机模型预测控制的教学演示、课程设计或毕业设计项目;②作为电机先进控制算法(如MPC、MPTC)的仿真验证平台;③支撑科研中对控制性能优化(如动态响应、抗干扰能力)的研究需求; 阅读建议:建议读者结合Simulink环境动手搭建模型,深入理解各模块间的信号流向与控制逻辑,重点掌握预测模型构建、代价函数设计与开关状态选择机制,并可通过修改电机参数或控制策略进行拓展实验,以增强实践与创新能力。
根据原作 https://pan.quark.cn/s/23d6270309e5 的源码改编 湖北省黄石市2021年中考数学试卷所包含的知识点广泛涉及了中学数学的基础领域,涵盖了实数、科学记数法、分式方程、几何体的三视图、立体几何、概率统计以及代数方程等多个方面。 接下来将对每道试题所关联的知识点进行深入剖析:1. 实数与倒数的定义:该题目旨在检验学生对倒数概念的掌握程度,即一个数a的倒数表达为1/a,因此-7的倒数可表示为-1/7。 2. 科学记数法的运用:科学记数法是一种表示极大或极小数字的方法,其形式为a×10^n,其中1≤|a|<10,n为整数。 此题要求学生运用科学记数法表示一个文单位的距离,将1.4960亿千米转换为1.4960×10^8千米。 3. 分式方程的求解方法:考察学生解决包含分母的方程的能力,题目要求找出满足方程3/(2x-1)=1的x值,需通过消除分母的方式转化为整式方程进行解答。 4. 三视图的辨认:该题目测试学生对于几何体三视图(主视图、左视图、俯视图)的认识,需要识别出具有两个相同视图而另一个不同的几何体。 5. 立体几何与表面积的计算:题目要求学生计算由直角三角形旋转形成的圆锥的表面积,要求学生对圆锥的底面积和侧面积公式有所了解并加以运用。 6. 统计学的基础概念:题目涉及众数、平均数、极差和中位数的定义,要求学生根据提供的数据信息选择恰当的统计量。 7. 方程的整数解求解:考察学生在实际问题中进行数学建模的能力,通过建立方程来计算在特定条件下帐篷的搭建方案数量。 8. 三角学的实际应用:题目通过在直角三角形中运用三角函数来求解特定线段的长度。 利用正弦定理求解AD的长度是解答该问题的关键。 9. 几何变换的应用:题目要求学生运用三角板的旋转来求解特定点的...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值