zoukankan      html  css  js  c++  java
  • IO流4(File类,Properties类)

    File类:

    File类是用来将文件或者文件夹封装成对象,方便对文件或者文件夹的属性信息进行操作。

      1: public static void main(String[] args) 
    
      2: 	{
    
      3: 		//将a.txt封装成File类对象,可以将已知的和未出现的文件或者文件夹封装成对象
    
      4: 		File f1=new File("a.txt");
    
      5: 		//将b.txt封装到abc文件夹下
    
      6: 		File f2=new File("c:\abc","b.txt");
    
      7: 		//先将abc文件夹封装成一个对象,在作为参数,将c.txt封装到abc文件夹下
    
      8: 		File d=new File("c:\abc");
    
      9: 		File f3=new File(d,"c.txt");
    
     10: 
    
     11: 		//打印结果为a.txt,打印结果为被封装的路径
    
     12: 		System.out.println("f1:"+f1);
    
     13: 		//目录分隔符\在Linux下不会被识别,跨平台性差,可以用separator来替换
    
     14: 		File f4=new File("c:"+File.separator+"abc","b.txt");
    
     15: 	}

    File类的常见方法:

    <1>创建

    boolean   creatNewFile(  );在指定位置创建文件时,如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立就创建文件,如果文件已经存在,就覆盖掉。

    boolean   mkdir(  );创建文件夹

    boolean   mkdirs(  );创建多级文件夹

      1: File f=new File("abc");
    
      2: System.out.println("mkdir"+f.mkdir());
    
      3: 
    
      4: File f1=new File("abc\kkk\dd");
    
      5: System.out.println("mkdirs"+f1.mkdirs());
    
    <2>删除

    boolean delete( );void deleteOnExit( );在程序退出时,删除掉指定的文件

    <3>判断

    boolean canExecute( );是否可执行boolean canRead( );是否可读boolean canWrite( );是否可写boolean exists( );文件是否存在boolean isDirectory( );是否是目录boolean isFile( );是否是文件boolean isHidden( );是否为隐藏文件boolean isAbsolute( );是否为绝对路径,文件不存在,也可以进行判断

      1: File f=new File("d:\java1223\day20\file.txt");
    
      2: System.out.println(f.isAbsolute());
    
      3: 

    此时并未创建文件,但是打印结果依旧为true。<4>获取信息getPath( );获取路径,获取到的是被封装的路径getAbsolutePath( );获取绝对路径getName( );获取到文件名getParent( );返回此抽象路径名父目录的路径名字符串,如果此路径名没有指定父目录,则返回nulllastModified( );返回此抽象路径名表示的文件夹的最后一次被修改的时间length( );返回此抽象路径名表示的文件的长度renameTo( );重命名

      1: File f1=new File("c:\Test.java");
    
      2: File f2=new File("D:\hahah.java");
    
      3: 
    
      4: System.out.println("rename:"+f1.renameTo(f2));
    
      5: 

    作用是将C盘下的Test文件重命名为hahah,并且移动到D盘下去。list( );返回值为String[] ,是一个字符串数组,功能为打印所有文件名以及文件夹名

      1: //将C盘下的所有文件以及文件夹的名称都打印出来,包括隐藏文件
    
      2: File f=new File("c:\");
    
      3: String[] names=f.list();
    
      4: for(String name:names)
    
      5: {
    
      6: 	System.out.println(name);
    
      7: }
    
      8: 

    调用list方法的File对象必须是封装了一个目录,而且该目录必须存在。

    练习:将D:\j\day19下的所有的java文件列出来

      1: public static void main(String[] args) 
    
      2: 	{
    
      3: 		File f=new File("D:\j\day19");
    
      4: 
    
      5: 		String[] names=f.list();
    
      6: 
    
      7: 		for(int x=0;x<names.length;x++)
    
      8: 		{
    
      9: 			if(names[x].endsWith(".java"))
    
     10: 				System.out.println(names[x]);
    
     11: 		}
    
     12: 	}

    使用文件名过滤:

      1: import java.io.*;
    
      2: 
    
      3: class JavaFileList 
    
      4: {
    
      5: 	public static void main(String[] args) throws IOException
    
      6: 	{
    
      7: 		FileWriter fw=new FileWriter("javalist.txt");
    
      8: 
    
      9: 		BufferedWriter bufw=new BufferedWriter(fw);
    
     10: 
    
     11: 		File dir=new File("d:\j\day19");
    
     12: 		javaFileList(dir,bufw);
    
     13: 
    
     14: 		bufw.close();
    
     15: 	}
    
     16: 
    
     17: 	public static void javaFileList(File dir,BufferedWriter bufw)throws IOException
    
     18: 	{
    
     19: 		File[] files=dir.listFiles();
    
     20: 		for(int x=0;x<files.length;x++)
    
     21: 		{
    
     22: 			if(files[x].isDirectory())
    
     23: 				javaFileList(files[x],bufw);
    
     24: 			else if(files[x].getName().endsWith(".java"))
    
     25: 			{
    
     26: 				bufw.write(files[x].getName()+"----AbsolutePath----"+files[x].getAbsolutePath());
    
     27: 				
    
     28: 				bufw.newLine();
    
     29: 				bufw.flush();
    
     30: 			}
    
     31: 		}
    
     32: 	}
    
     33: 
    
     34: }
    
     35: 

    ListFiles(  );返回值为File类型

      1: 
    
      2: File dir=new File("c:\");
    
      3: File[] files=dir.listFiles();
    
      4: 
    
      5: for(File f:files)
    
      6: {
    
      7: 	System.out.println(f.getName()+"....."+f.length());
    
      8: }
    
      9: 
    
     10: //使用list()方法或者listFiles()方法,都只可以取出来当前目录下的文件或者文件夹,
    
     11: //不可以取出来子目录下的文件或者文件夹

    列出来指定目录下的文件或者文件夹,包含子目录中的内容,即列出来指定目录下的所有内容。

      1: class FileDemo3 
    
      2: {
    
      3: 	public static void main(String[] args) 
    
      4: 	{
    
      5: 		File dir=new File(d:\java1223);
    
      6: 		showDir(dir);
    
      7: 
    
      8: 	}
    
      9: 
    
     10: 	public static void showDir(File dir)
    
     11: 	{
    
     12: 		System.out.println(dir);
    
     13: 		File[] files=dir.listFiles();
    
     14: 		for(int x=0;x<files.length;x++)
    
     15: 		{
    
     16: 			if(files[x].isDirectory())
    
     17: 				showDir(files[x]);//递归,函数自身调用自身
    
     18: 			else
    
     19: 				System.out.println(files[x]);
    
     20: 		}
    
     21: 	}
    
     22: }
    
     23: /*递归的注意事项:
    
     24: 1.限定条件
    
     25: 2.要注意递归次数,尽量避免内存溢出
    
     26: */

    需求:删除掉带内容的目录

    分析:在window中,删除目录是从里面往外删除的,需要用到递归

      1: class RemoveDirDemo 
    
      2: {
    
      3: 	public static void main(String[] args) 
    
      4: 	{
    
      5: 		File f=new File("c:\j\");
    
      6: 		removeDir(f);
    
      7: 	}
    
      8: 
    
      9: 
    
     10: 	public static void removeDirDemo(File dir)
    
     11: 	{
    
     12: 		File[] files=dir.listFiles();
    
     13: 		for(int x=0;x<files.length;x++)
    
     14: 		{
    
     15: 			if(files[x].isDirectory())
    
     16: 				removeDir(files[x]);
    
     17: 			else
    
     18: 				//进行判断,如果是文件的话,就进行删除
    
     19: 				files[x].delete();
    
     20: 		}
    
     21: 		//删除掉该目录下的所有文件以后,删除掉该目录
    
     22: 		dir.delete();
    
     23: 	}
    
     24: }
    
     25: 

    练习:将一个指定目录下的java文件的绝对路径存储到一个文本文件中去

      1: import java.io.*;
    
      2: 
    
      3: /*
    
      4: 首先应该开辟一个新的文本文档,用来存储。
    
      5: 然后遍历指定目录下的所有的文件,如果是java文件的话,则将名字和绝对路径写入到文本
    
      6: 文档中去。
    
      7: */
    
      8: class JavaFileList 
    
      9: {
    
     10: 	public static void main(String[] args) throws IOException
    
     11: 	{
    
     12: 		FileWriter fw=new FileWriter("javalist.txt");
    
     13: 
    
     14: 		BufferedWriter bufw=new BufferedWriter(fw);
    
     15: 
    
     16: 		File dir=new File("d:\j\day19");
    
     17: 		javaFileList(dir,bufw);
    
     18: 
    
     19: 		bufw.close();
    
     20: 	}
    
     21: 
    
     22: 	public static void javaFileList(File dir,BufferedWriter bufw)throws IOException
    
     23: 	{
    
     24: 		File[] files=dir.listFiles();
    
     25: 		for(int x=0;x<files.length;x++)
    
     26: 		{
    
     27: 			if(files[x].isDirectory())
    
     28: 				javaFileList(files[x],bufw);
    
     29: 			else if(files[x].getName().endsWith(".java"))
    
     30: 			{
    
     31: 				bufw.write(files[x].getName()+"----AbsolutePath----"+files[x].getAbsolutePath());
    
     32: 				
    
     33: 				bufw.newLine();
    
     34: 				bufw.flush();
    
     35: 			}
    
     36: 		}
    
     37: 	}
    
     38: 
    
     39: }
    
     40: 
    
     41: 
    
     42: 

    Properties类:

    Properties类是Hashtable的子类,也就是说,它具备Map集合的特点,而且它里面存储的键值对都是字符串,是集合中和IO技术相结合的集合容器。

    该对象的特点是:可以用于键值对形式的配置文件

    Properties类的常用方法:

    <1>设置和获取元素setProperty(String key,String value);  getProperty(String key)
      1: 
    
      2: 
    
      3: public static void setAndGet()
    
      4: {
    
      5: 	Properties prop=new Properties();
    
      6: 	prop.setProperty("zhangsan","30");
    
      7: 	prop.setProperty("lisi","39");
    
      8: 
    
      9: 	String value=prop.getProperty("lisi");
    
     10: 	System.out.println(value);
    
     11: }
    
     12: 
      1: //获取到所有的元素
    
      2: Set<String> names=prop.stringPropertyNames();
    
      3: for(String s:names)
    
      4: {
    
      5: 	System.out.println(s+"....."+prop.getProperty(s));
    
      6: }

    stringPropertyNames 方法的返回值为Set类型,里面存储的是key值

    <2>如何将流中的数据存储到集合中去呢?

    例如:将info.txt中的键值对数据存储到集合中进行操作

    思路:

    1.首先需要用一个流和info.txt文件关联

    2.读取一行数据,将该行数据用“=”进行切割

    3.等号左边的作为键,等号右边的作为值,存储到Properties中去

      1: import java.io.*;
    
      2: import java.util.*;
    
      3: 
    
      4: class PropertiesDemo 
    
      5: {
    
      6: 	public static void method_1(Properties prop)
    
      7: 	{
    
      8: 		BufferedReader bufr=null;
    
      9: 
    
     10: 		try
    
     11: 		{
    
     12: 			bufr=new BufferedReader(new FileReader("info.txt"));
    
     13: 			String arr=null;
    
     14: 			while((arr=bufr.readLine())!=null)
    
     15: 			{
    
     16: 				String[] s=arr.split("=");
    
     17: 				prop.setProperty(s[0],s[1]);
    
     18: 			}
    
     19: 		}
    
     20: 		catch (Exception e)
    
     21: 		{
    
     22: 			System.out.println("读取失败");
    
     23: 		}
    
     24: 		finally
    
     25: 		{
    
     26: 			try
    
     27: 			{
    
     28: 				bufr.close();
    
     29: 			}
    
     30: 			catch (Exception e)
    
     31: 			{
    
     32: 				System.out.println("关闭资源失败");
    
     33: 			}
    
     34: 			
    
     35: 		}
    
     36: 		
    
     37: 	}
    
     38: 
    
     39: 	public static void main(String[] args) 
    
     40: 	{
    
     41: 		Properties prop=new Properties();
    
     42: 		method_1(prop);
    
     43: 		Set<String> names=prop.stringPropertyNames();
    
     44: 		for(String s:names)
    
     45: 		{
    
     46: 			System.out.println(s+"-------"+prop.getProperty(s));
    
     47: 		}
    
     48: 	}
    
     49: }
      1: 
    
      2: /*
    
      3: load(InputStream inStream),从输入流读取属性列表
    
      4: load(Reader reader),用面向行的格式,从输入字符流中读取属性列表(键和元素对)
    
      5: 
    
      6: */
    
      7: public static void loadDemo()throws IOException
    
      8: {
    
      9: 	Properties prop=new Properties();
    
     10: 	FileInputStream fis=new FileInputStream("info.txt");
    
     11: 
    
     12: 	//将流中的数据加载进集合
    
     13: 	prop.load(fis);
    
     14: 
    
     15: 	//list(PrintStream  ps)  list(PrintWriter pw)将属性列表输出到指定的输出流
    
     16: 	prop.list(System.out);
    
     17: }
    
     18: 
    
     19: /*
    
     20: 此时如果prop.setProperty("wangwu","39");
    
     21: 修改了王五的年龄,打印结果中的年龄改变了,但是info文件中的年龄没有发生改变
    
     22: 使用store(OutputStream out,String comments)方法,将Properties表中的属性列表写入输出流
    
     23: 
    
     24: FileOutputStream  fos=new FileOutputStream("info.txt");
    
     25: prop.store(fos,"haha");
    
     26: 其中haha为注释信息,会以#haha的形式出现在info.txt文件中去
    
     27: */

    练习:用于记录应用程序运行次数,如果使用次数已到,则给出注册提示

      1: class RunCount 
    
      2: {
    
      3: 	public static void main(String[] args) throws IOException
    
      4: 	{
    
      5: 		Properties prop=new Properties();
    
      6: 		File file=new File("count.ini");
    
      7: 
    
      8: 		//如果文件不存在的话,则创建一个文件
    
      9: 		if(!file.exists())
    
     10: 			file.createNewFile();
    
     11: 		FileInputStream fis=new FileInputStream(file);
    
     12: 
    
     13: 		//将文件中的信息加载到集合中去,并进行操作
    
     14: 		prop.load(fis);
    
     15: 		
    
     16: 		int count=0;
    
     17: 		String value=prop.getProperty("time");
    
     18: 		if(value!=null)
    
     19: 		{
    
     20: 			count=Integer.parseInt(value);
    
     21: 			if(count>=5)
    
     22: 			{
    
     23: 				System.out.println("您好,使用次数已到");
    
     24: 				return ;
    
     25: 			}
    
     26: 		}
    
     27: 
    
     28: 		count++;
    
     29: 		prop.setProperty("time",count+"");
    
     30: 		FileOutputStream fos=new FileOutputStream(file);
    
     31: 		prop.store(fos,"");
    
     32: 		fos.close();
    
     33: 		fis.close();
    
     34: 
    
     35: 
    
     36: 	}
    
     37: }
    
     38: 
     
  • 相关阅读:
    设计模式(一)基础面向对象
    面试题之三门问题
    「巫师3(The Witcher 3:Wild Hunt)」游戏测评
    欧拉角和四元数
    struts标签遍历各种list Map
    浅谈HtmlCleaner+XPath解析html或者xml
    hadoop简单例子
    解决JSP参数传递乱码的问题
    Set、List、Map的区别(浅谈)
    做个犀利的码农
  • 原文地址:https://www.cnblogs.com/mandy920213/p/3535369.html
Copyright © 2011-2022 走看看