Java学习日志(20-1-IO流-File类及文件列表操作)

File类

    用于将文件或文件夹封装成对象

    方便对文件与文件夹进行操作

    File对象可以作为参数传递给刘的构造函数

import java.io.*;
class FileDemo{
	public static void sop(Object obj){
		System.out.println(obj);
	}
	public static void main(String[] args){
		consMethod();
	}
	// 创建对象
	public static void consMethod(){
		// 封装File对象,可以将已有和未有的文件封装
		File f1=new File("a.txt");
		File f2=new File("c:\\abc","b.txt");
		
		File d=new File("c:\\abc");
		File f3=new File(d,"c.txt");
		sop(f1);
		sop(f2);
		sop(f3);
		// separator为自动切换与系统相关的分隔符
		File f4=new File("c:"+File.separator+"e.txt");
	}
}

创建与删除

	// 创建文件	boolean createNewFile();
	// 在指定位置创建文件,如果已经存在,返回false,不创建
	public static void method_1()throws IOException{
		File f=new File("file.txt");
		sop("create:"+f.createNewFile());
	// 删除文件	boolean delete();	void deleteOnExit();
		sop("delete:"+f.delete());
	// 在结束时删除
		f.deleteOnExit();
	}

判断

	// 判断	boolean exists();是否存在
	public static void method_2()throws IOException{
		File e=new File("file.txt");
		sop(e.exists());
		// sop(e.canExecute());文件能否运行
		// 创建目录
		File dir=new File("abc");
		sop(dir.mkdir()); //创建多级目录 mkdirs();	
	}
	public static void method_3{
		File e1=new File("file.txt");
		// 再判断文件是否是文件或目录时,必须先判断是否封装
		sop(e1.exists());
		sop(e1.isDirectory());
		sop(e1.isDFile());
	}

获取

	// 获取信息	getName();	getPath();	getParent();
	//			getAbsolutePath();	getAbsoluteFile();
	public static void metod_4{
		// File e3=new File("c:\\a.txt");
		File e3=new File("a.txt");
		sop(e3.getPath());
		sop(e3.getAbsolutePath());//绝对路径
		//该方法返回的是绝对路径中的文件父目录,如果是相对路径返回null
		// 如果相对路径有上一层,则返回该目录
		sop(e3.getParent());
	}
	public static void method_5{
		File e4=new File("c:\\text.java");
		File e5=new File("c:\\haha.java");
		//重命名
		sop(e4.renameTo(e5));
	}

文件列表

	//列出可用的系统根
	public static void listRootsDemo(){
		File[]files=File.listRoots();
		for(File f:files){
			System.out.println(f);
		}
	}
	//列出所有目录,包含隐藏
	public static void listDemo(){
		File f=new File("c:\\");//对象必须是已封装的目录
		String[]names=f.list();
		for(String name:names){
			System.out.println(name);
		}
	}

    筛选文件格式

    public static void listDemo2(){
		File dir=new File("c:\\");
		String[]arr=dir.list(new FilenameFilter(){
			public boolean accept(File dir,String name){
				// System.out.println("dir:"+dir+"....name:"+name);
				//判断是否需要返回
				// return true;
				return name.endsWith(".dll");
			}
		});
		System.out.println("len:"+arr.length);
		for(String name:arr){
			System.out.println(name);
		}
	}

    获取更多信息

	public static void main(String[] args){
		File dir=new File("c:\\");
		//listFiles()相比list()可以获取更多信息
		File[]files=dir.listFiles();
		for(File f:files){
			System.out.println(f.getName()+"__"+f.length());
		}
	}

列出目录下所有内容-递归

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

因为目录中还有目录,只要使用同一个列出目录功能的函数即可
在列出过程中出现的还是目录的话,可以再次调用本功能
函数自身调用自身,称为递归
**递归要注意的是
	1.限定条件
	2.递归次数,避免内存溢出
 */

import java.io.*;
class FileDemo3{
	public static void main(String[] args)throws IOException{
		File dir=new File("H:\\life4life");
		showDir(dir,0);
	}
	public static String getLevel(int level){
		StringBuilder sb=new StringBuilder();
		for(int x=0;x<level;x++){
			sb.append("|-");
		}
		return sb.toString();
	}
	/*递归函数演示
	public static void toBin(int num){
		if(num>0){
			toBin(num/2);
			System.out.println(num%2);
		}
	}
	public static void getSum(int n){
		if(n==1){
			return 1;
		}
		return n+getSum(n-1);
	}
	*/
	public static void showDir(File dir,int level){
		System.out.println(getLevel(level)+dir.getName());
		level++;
		File[]files=dir.listFiles();
		for(int x=0;x<files.length;x++){
			if(files[x].isDirectory()){
				showDir(files[x],level);
			}
			else{
				System.out.println(getLevel(level)+files[x]);
			}
		}
	}
}

删除带内容的目录

/* 
删除一个带内容的目录
原理:在Windows中,删除目录是从里面往外删除

因此需要用到递归
 */
import java.io.*;
class RemoveDir{
	public static void main(String[] args){
		File dir=new File("d:\\testdir");
		removeDir(dir);
	}
	
	public static void removeDir(File dir){
		File[]files=dir.listFiles();
		for(int x=0;x<files.length;x++){
			if(files[x].isDirectory()){
				removeDir(files[x]);
			}
			else{
				System.out.println(files[x].toString()+"-file-"+files[x].delete());
			}
		}
		System.out.println(dir+"--dir--"+dir.delete());
	}
}

创建java文件列表

/* 
练习
将一个指定目录下的java文件的绝对路径储存到一个文本文件中
建立一个java文件列表文件

思路:
1.对指定目录进行递归
2.获取递归过程中所有的java文件路径
3.将这些路径存储到集合中
 */
 import java.io.*;
 import java.util.*;
 class JavaFileList{
	 public static void main(String[] args)throws IOException{
		 File dir=new File("H:\\");
		 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(".java")){
					 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 path=f.getAbsolutePath();
				 bufw.write(path);
				 bufw.newLine();
				 bufw.flush();
			 }
		 }
		 catch(IOException e){
			 throw e;
		 }
		 finally{
			 try{
				 if(bufw!=null){
					 bufw.close();
				 }
			 }
			 catch(IOException e1){
				 throw e1;
			 }
		 }
	 }
 }

 

转载于:https://my.oschina.net/Almon/blog/753341

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值