`
Luob.
  • 浏览: 1578851 次
  • 来自: 上海
社区版块
存档分类
最新评论

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));
			
		}
		
		
		
		
	}
}
1
3
分享到:
评论

相关推荐

    20天学通JAVA技术高清版

    "20天学通JAVA技术高清版"显然是一份旨在帮助初学者在短时间内掌握Java核心技术的教程资源。这份教程可能包含了从基础语法到高级特性的全面讲解,通过高清视频或文档形式,使学习过程更为直观易懂。 1. **Java基础...

    21天java学习PPT

    在“21天Java学习PPT”中,你将踏上一段深入学习Java编程语言的旅程。这个资源旨在帮助初学者在短短21天内建立起坚实的Java基础,同时也适合那些希望巩固或更新Java知识的开发者。PPT的形式使得学习更加直观和易懂,...

    达内java基础培训课程

    这份资料集合了作者在达内参加前20天学习的精华内容,旨在为那些考虑参加达内Java培训或者对Java编程感兴趣的初学者提供一份宝贵的参考。 1. **Java语言概述** Java是一种跨平台、面向对象的编程语言,由Sun ...

    Java电子教案(21天学通JAVA)

    Java电子教案(21天学通JAVA)是一套详尽且实用的教学资源,旨在帮助初学者在短时间内掌握Java编程语言的基础知识。这份教程通过PPT的形式,将理论知识与实践案例相结合,使得学习过程更加直观易懂。接下来,我们将...

    Java核心课件

    Java核心课件是一套全面而深入的教程,旨在帮助学习者在短短20天内熟练掌握Java编程语言的核心概念和技术。这个课程以通俗易懂的方式呈现,使得即使是没有编程背景的初学者也能轻松上手。Java是一种广泛使用的面向...

    21天学通Java-由浅入深

    87 5.3 数组操作的举例 88 5.3.1 数组元素值的复制 88 5.3.2 数组元素的排序 90 5.3.3 在数组里查找指定元素 91 5.3.4 利用数组打印26个英文字母 92 5.4 综合练习 93 5.5 小结 94 5.6 习题 94 第二篇 面向对象篇 第6...

    java面试题目20页可已打印题目含解析和答案

    创建、写入和删除文件在Java中通常使用`File`、`FileWriter`和`BufferedWriter`类完成。正确的做法是在写入文件后检查文件是否存在,然后删除它。注意,`BufferedWriter`的构造函数需要一个`FileWriter`实例。因此...

    Java 2编程21天自学通(2)

    在“Java 2编程21天自学通”的后半部分,我们深入探讨了Java编程语言的核心概念和技术。这个自学教程旨在帮助初学者在21天内掌握Java编程的基础,为今后的开发工作打下坚实的基础。以下是根据描述和标签提炼出的一些...

    java毕向东源代码16-25天

    这25天的学习内容是Java开发者的进阶之路,通过逐日递增的难度,帮助学员巩固基础并提升技能。 【描述】"java毕向东源代码16-25天,共25天" 表明这是一个持续25天的Java学习计划,强调了实践与理论的结合。这期间,...

    java初学者完整代码+注释2

    这个压缩包的“day2”可能意味着课程的第二天,进一步深入到更具体的话题。学习者应该逐步理解和实践这些知识点,通过编写和运行代码来巩固理解。记住,持续练习和查阅文档是成为Java程序员的关键步骤。祝你在Java...

    Java 2实用教程(第三版)实验指导与习题解答

    Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 ...

    java面试题[基础类].doc

    String并不是基本数据类型,而是一个对象,它是类`java.lang.String`的实例。基本数据类型是直接存储值的,而String对象存储的是字符序列的引用。 2. 字符串操作: - 字符串反转:可以使用StringBuilder或...

    JavaSE基础入门视频教程33天之(25) part2

    JavaSE基础入门视频教程33天之(25)的部分主要涵盖了Java的输入/输出(IO)流系统,这是Java编程中的重要概念,对于初学者来说尤其关键。在这个系列的教程中,它旨在帮助没有编程基础的人快速掌握Java基础知识,并...

    JavaSE基础入门视频教程33天之(22) part3

    "day22_20(IO流对象)遍历目录下的所有java文件.avi"展示了如何找到指定目录下所有的.java源文件。在实际开发中,这样的功能可能用于代码分析、编译或打包任务。 "day22_19(IO流对象)递归计算斐波那契数列.avi"则...

    java面试大全,存在大量例题

    - `File`类用于处理文件和目录,`FileInputStream`/`FileOutputStream`进行文件读写,`File.isDirectory()`检查是否为目录。 7. **多态**: - 多态基于继承、重载(方法名相同,参数不同)和覆盖(方法名相同,...

    2021-2022计算机二级等级考试试题及答案No.18590.docx

    7. Java中,File对象的构造函数用于指定文件路径。在Windows系统中,正确的绝对路径应使用反斜杠(\)进行目录分隔,因此正确答案是"C:\\my\\1.txt"。 8. 关系型数据库采用二维表的形式来存储和管理数据,每个二维...

    2021-2022计算机二级等级考试试题及答案No.2740.docx

    28. 文件删除:如果File对象表示的是目录,直接调用delete()方法通常无法删除含有文件或子目录的目录,需要递归删除或使用专门的删除目录方法。 29. 形状控件:形状控件可以显示圆形、椭圆和圆角矩形,但不能直接...

    2021-2022计算机二级等级考试试题及答案No.12820.docx

    20. Java中的`synchronized`关键字用于定义临界区,实现线程同步,选项D正确。 21. FTP(File Transfer Protocol)允许用户在Internet上**上载和下载文件**,选项B正确。 22. 十进制数29转换为无符号二进制是11101...

    2021-2022计算机二级等级考试试题及答案No.9456.docx

    23. **日期条件**:在SQL查询中,`Between Date() And Date()-20`用于查找过去20天内的记录,答案C正确。 24. **数据库设计原则**:包括“一事一地”原则、避免重复字段、关联表间的联系等,答案D正确。 25. **...

Global site tag (gtag.js) - Google Analytics