zoukankan      html  css  js  c++  java
  • IO流__【File类常见操作】【文件列表】【递归】


    File类

    文件和目录路径名的抽象表示形式。

    用来将文件或者文件夹封装成对象;方便对文件与文件夹的属性信息进行操作。
    File对象可以作为参数传递给流的构造函数。
    了解File类中的常用方法。

    File类常用方法
    1,创建
    boolean createNewFile();
    当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
    在指定位置创建文件,如果文件已经存在,则不创建返回false 
    与输出流不同:输出流对象创建文件时,如果文件已经存在,会覆盖原有文件
    boolean mkdir();//创建文件夹
    boolean mkdirs();//创建多级文件夹
    2,删除 boolean delete();删除成功返回true ;失败返回false
    void deleteOnExit();在程序退出时删除指定文件
    3,判断 boolean canExecute(); 测试应用程序是否可以执行此文件。可以和Runtime类配合使用
    exists();文件或目录是否存在。
    在判断文件对象是否是文件或者目的时,必须要先判断该对象封装的内容是否存在
    isFile(); 判断是否是文件,
    isDirectory();是否是目录
    isHidden(); 是否隐藏
    isAbsolute();是否绝对路径
    4,获取信息
    getName();
    getPath();获取相对路径字符串
    getParent();返回绝对路径的父目录,相对路径没有父目录,则返回null,如果有上层目录,那么该目录就是返回结果
    getAbsolutePath();//抽象路径名的绝对路径名字符串
    lastModified();//返回文件最后一次被修改的时间
    length(); 文件大小
    5,修改信息
    renameTo(File f);修改文件名称及路径,成功则返回true

    示例:

    import java.io.*;
    class FileDemo 
    {
    	public static void main(String[] args)  throws IOException
    	{
    //		consMethod();
    		method_5();
    	}
    	public static void method_5()
    	{
    		File f1 = new File("c:\Demo.java");
    		File f2 = new File("G:\haha.java");
    		sop("renameTo: "+f1.renameTo(f2));//改文件名及路径
    	}
    	public static void method_4()
    	{
    		File f = new File("G:\a.txt");
    		sop("path: "+ f.getPath());//获取相对路径
    		sop("absolutePath: "+f.getAbsolutePath());//获取绝对路径
    		sop("parent: "+f.getParent());//返回绝对路径的父目录,相对路径没有父目录,则返回null
    	}								//如果相对路径中有上层目录,那么该目录就是返回结果
    	public static void method_3() throws IOException
    	{
    		File f = new File("file.txt");	
    		f.createNewFile();//创建文件
    		f.mkdir();		//创建目录,名称为file.txt的文件夹
    		sop("dir: "+ f.isDirectory());//在判断文件对象是否是文件或者目的时,必须要先判断该对象封装的内容是否存在
    		sop("file: "+ f.isFile());		//通过exist()判断
    	}
    	public static void method_2()
    	{
    		File f = new File("file.txt");
    //		sop("execute: "+f.canExecute());//判断是否能执行
    //		sop("exists: "+f.exists());		//判断是否存在
    		File dir = new File("abc\fd\df\df");		//创建抽象路径对象
    		sop("mkdirs: "+dir.mkdirs());				//根据该对象创建文件夹
    	}
    	public static void method_1() throws IOException
    	{
    		File f = new File("file.txt");
    		f.deleteOnExit();	//在程序退出时删除指定文件
    //		sop("creat: "+ f.createNewFile());//1,创建成功返回true,如果文件已存在返回false
    		sop("delete:"+f.delete());		//2,删除,成功删除返回true,失败返回false
    	}
    	public static void consMethod() //构造方法演示
    	{					//file可以将已有的和未出现的文件或者文件夹封装成对象
    		File f1 = new File("a.txt");//将a.txt封装成file对象,
    		File f2 = new File("G:\haha","b.txt");
    		File d  = new File("c:\haha");//将目录和文件拆分,可以更加自由的定义
    		File f3 = new File(d,"c.txt");
    		sop("f3: "+f3);
    		File f4 = new File("c:"+File.separator+"haha"+File.separator+"abc"+"a.txt");
    	}					//使用跨平台的分隔符seprator,增强代码健壮性
    	public static void sop(Object obj){
    		System.out.println(obj);
    	}
    }

    文件列表

    获取文件列表的方法:

    listRoots()列出可用的文件系统根
    list()  返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
    该file对象必须封装了一个目录,而且该目录必须存在,否则方法返回null
    listFiles()返回File对象,该目录下的文件和文件名File对象,能够操作对象,所以更加常用
    list(FilenameFilter filter);过滤流; FilenameFilter接口,仅有的accept()方法


    import java.io.*;
    class  FilesDemo2
    {
    	public static void main(String[] args) 
    	{
    //		listRootsDemo();
    //		listDemo_2();
    		listFilesDemo();
    	}
    	public static void listFilesDemo()//
    	{
    		File dir = new File("G:\");
    		File[] files = dir.listFiles();//由File对象组成的数组
    		for (File f:files )
    		{
    			sop(f.getName()+" : "+f.length());//打印该对象名称及字节数(大小)
    		}
    	}
    	public static void listDemo_2()//过滤流 
    	{
    		File dir = new File("f:\JAVA\test");
    		String[] arr = dir.list(new FilenameFilter(){//匿名内部类实现FilenameFilter接口
    			public boolean accept(File dir,String name)
    			{
    				return name.endsWith(".txt");
    			}
    		});
    		sop("len: "+arr.length);
    		for (String name: arr )
    		{
    			sop(name);
    		}
    	}
    	public static void listDemo_1()	
    	{
    		File dir = new File("f:\JAVA\test");//该对象必须是存在的目录
    		String[] names = dir.list();
    		for (String name :names )//遍历列出该目录下所有文件和目录
    		{
    			sop(name);
    		}
    	}
    	public static void listRootsDemo()//根目录
    	{
    		File[] files = File.listRoots();//列出文件系统根目录(盘符)
    		for (File f : files )//增强for循环,遍历
    		{
    			sop(f);
    		}
    	}
    	public static void sop(Object obj)
    	{
    		System.out.println(obj);	}
    }

    递归

    需求:
    列出指定目录下文件或文件夹,及其子目录中内容

    分析目录中还有目录。只需执行同一个列出目录功能的函数完成即可;在列出过程中判定出现的对象还是目录的话,就再次调用本功能

    函数自身调用自身,这种编程形式称为递归

    递归示例:

    	public static int recursion_2(int n){//递归演示2求累加和
    		if(n==1)
    			return 1;
    		else
    			return n+recursion_2(n-1);
    	}
    	public static void recursion(int num){//递归演示求二进制
    		if (num>0){
    			recursion(num/2);
    			sop(num%2);
    		}
    	}

    内存图解:传入一个值6来求其二进制表现


    递归注意事项:
    1,限定条件
    2,要注意控制次数,避免内存溢出

    递归获取目录下所有文件

    import java.io.*;
    class FileDemo3 
    {
    	public static void main(String[] args) 
    	{
    		File dir = new File("f:\java\test");
    		showDir(dir);
    	}
    	public static void showDir(File dir)
    	{
    		sop(dir);
    		File[] files = dir.listFiles();//返回dir对象下的File对象
    		for(int x=0; x<files.length; x++)
    		{
    			if(files[x].isDirectory())
    				showDir(files[x]);	//如果是目录,递归
    			else
    				sop(files[x]);		//如果是文件,打印名称
    		}
    	}
    	public static void sop(Object obj){
    		System.out.println(obj);
    	}
    }

    删除一个带内容的目录

    原理:
    在windows中删除目录是从里面往外删的,就需要用到递归

    import java.io.*;
    class RemoveDir 
    {
    	public static void main(String[] args) 
    	{
    		File dir = new File("G:\delete");
    		removeDir(dir);
    	}
    	public static void removeDir(File dir)
    	{
    		File[] files = dir.listFiles();	//获取该目录下所有文件对象
    		for (File f:files )
    		{
    			if (!f.isHidden() && f.isDirectory())//非隐藏并且是目录
    				removeDir(f);
    			else
    			sop(f.toString()+" file "+f.delete());//删除文件
    		}
    		sop(dir+"  dir  "+dir.delete());	//删除目录
    	}
    	public static void sop(Object obj){
    		System.out.println(obj);
    	}
    }

    需求:文件列表

    建立一个java文件列表文件,将制定目录下java文件的绝对路径,存储到一个文本文件中
    思路:
    1,对指定目录进行递归
    2,获取递归中java文件的路径
    3,将这些路径存储到集合中
    4,将集合中数据写入到列表文件中

    操作:

    import java.io.*;
    import java.util.*;	//集合
    class JavaFileList 
    {
    	public static void main(String[] args) throws IOException
    	{
    		File dir = new File("f:\java\test");
    		List<File> list = new ArrayList<File>();
    		fileToList(dir,list);
    //		System.out.println(list.size());
    		File file = new File(dir,"javalist.txt");
    		writeToFile(list,file);	//写入文本
    
    	}
    	public static void fileToList(File dir,List<File> list)
    	{
    		File[] files = dir.listFiles();//获取File对象数组
    		for (File f : files )
    		{
    			if(f.isDirectory())
    				fileToList(f,list);	//如果是目录,递归
    			else if (f.getName().endsWith(".java"))
    				list.add(f);		//将满足条件的File对象存入list集合
    		}
    	}
    	public static void writeToFile(List<File> list,File file)
    	{
    		BufferedWriter bufw = null;
    		try{
    				bufw = new BufferedWriter(new FileWriter(file));//FileWriter可以接收String,也可以接收File
    				for (File f: list )
    				{
    					String path = f.getAbsolutePath();//绝对路径
    					bufw.write(path);	//写入
    					bufw.newLine();
    					bufw.flush();
    				}
    		}
    		catch (IOException e){
    			throw new RuntimeException("");
    		}
    		finally{
    			try{
    				if(bufw!=null)
    					bufw.close();
    			}
    			catch (IOException e){
    				throw new RuntimeException("");
    			}
    		}
    	}
    }




  • 相关阅读:
    《新下级学》第八章第八、九节——责任总论等
    《新下级学》第八章第五、六、七节——信息不透明导致奖金失效等
    《新下级学》第八章第四节——不信任沟通
    《新下级学》第八章第三节——信任沟通
    《新下级学》第八章第二节——沟通工具
    《新下级学》第八章序和第一节——宏观互动
    《新下级学》第七章第五节——互动的陷阱
    《新下级学》第七章第四节——互动的三个频道
    GPS校时设备,GPS对时产品,NTP授时服务器
    北斗授时设备(NTP)在医疗行业的重要性
  • 原文地址:https://www.cnblogs.com/Joure/p/4337211.html
Copyright © 2011-2022 走看看