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

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面试题最全集,JAVA面试题最全集

    ### Java基础知识 #### 1. Java的基本数据类型与String类型的区别 Java中有八种基本数据类型,分为两类:整数类型(byte、short、int、long)和浮点类型(float、double),此外还包括布尔类型(boolean)和字符...

    Java企业级开发综合技能知识总结

    13. **用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?** - 排序方法参见上文快速排序示例。 - 序列化实现方法:实现`Serializable`接口或实现`Externalizable`接口。 14. **如在COLLECTION框架中,实现比较...

    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面试题目

    Java序列化是将对象状态信息转换为可以存储或传输的形式的过程。通过实现Serializable接口,对象可以被序列化。使用ObjectOutputStream类来保存对象状态。 6. 一个".java"源文件中是否可以包括多个类(不是内部类...

    整合了所有java经典面试题

    13. **用JAVA实现一种排序,JAVA类实现序列化的方法(二种)** - 排序方法已在上文提及。 - 序列化的两种实现方式: - 实现`Serializable`接口; - 使用`writeReplace()`和`readResolve()`方法自定义序列化逻辑。...

    华为java面试题

    #### 一、Java面向对象基础 1. **super()与this()的区别** - `super()`用于调用父类的构造方法或父类中的成员方法。 - `this()`用于调用本类中的其他构造方法。 2. **作用域public, protected, private,以及不写...

    JAVA面试题全集

    - 获取某个日期是否是当月的最后一天:可以使用 `java.time.LocalDate` 类的方法。 - 格式化日期:使用 `java.text.SimpleDateFormat` 或 `java.time.format.DateTimeFormatter`。 5. **数组和集合** - 数组是...

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

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

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

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

    java面试笔试题用到的

    在Java中,`String`对象用于表示文本,通常由字符序列组成。`String`是不可变的对象,这意味着一旦创建了一个`String`对象,它的内容就不能改变。 #### 2. 字符串的操作 - **字符串反转**:可以通过循环遍历字符串...

Global site tag (gtag.js) - Google Analytics