IO流--File类及方法

/*
File类常见的方法:
1.创建。
	构造方法。File();
	boolean createNewFile();在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
							和输出流不一样,输出流对象一建立创建文件,而且文件存在,会覆盖。
	boolean mkdir();创建文件夹。
	boolean mkdirs();创建多级目录。
2.删除。
	boolean delete();删除失败返回false。
	void deleteOnExit();退出时删除指定文件。
3.判断。
	boolean canExecute();是否可执行。
	int comparaTo(File pathname);按大小比较。如果按体积比,可自定义比较器。
	boolean exists();文件是否存在。
	boolean isDirectory();是否是目录(文件夹)。
	boolean isFile();是否是文件。
	boolean isAbsolute();是否绝对目录。
	boolean is Hidden();是否是隐藏。
4.获取信息。
	String getName();获取名称。
	String getPhth();获取路径。
	String getParent();获取父目录。该方法返回的是绝对路径中的父目录
	String getAbsolute();获取绝对路径。
	long lastModified();获取文件最后一次修改的时间。
	long length();获取文件大小。
	boolean renameTo(File f);重命名。
	File[] listRoots();获取有效盘符。
	String[] list(FilenameFilter filter);过滤文件列表
	listFiles();获取硬盘中所有文件列表。
*/

import java.io.*;
class FileDemo{
	public static void main(String[] args) throws IOException{
		method_1();
	}
	//创建File对象
	public static void method_1()throws IOException{
		//将a.txt封装成file对象,可以将已有和未出现的文件或者文件夹封装成对象。
		File f1 = new File("C:\\abc\\a.txt");

		//路径和文件分成两个参数传递
		File f2 = new File("C:\\abc","b.txt");

		//将父目录封装
		File d = new File("C:\\abc");
		File f3 = new File(d,"c.txt");

		show("f1:" + f1);
		show("f2:" + f2);
		show("f3:" + f3);

		//separator--分隔符,跨平台。
		File f4 = new File("C:"+File.separator+"abc"+File.separator+"a.txt");

		show("create:"+f4.createNewFile());
		
		show("delete:"+f1.delete());//true||false
		f2.deleteOnExit();//退出时删除
	}

	public void method_2(){
		File f = new File("1.txt");

		show("execute:" + f.canExecute());//ture||false

		show("exists" + f.exists());
		
		//创建目录,只能创建一级目录
		File dir = new File("acb");
		dir .mkdir();
	}

	public static void method_3(){
		 File f = new File("file.txt");

		 //记住在判断文件对象是否是文件或者目录时,必须要先判断该文件对象封装的内容是否存在。
		 //通过exists判断。
		 if(f.exists()){
			 show("dir"+f.isDirectory());//判断是否是目录
			 show("file:"+f.isFile());//判断是否是文件
		 }

		 show(f.isAbsolute());
	}
	public void method_4(){
		File f = new File("C:\\a.txt");

		show("path:" + f.getPath());
		show("abspath:" + f.getAbsolutePath());
		show("parent:" + f.getParent());//该方法返回的是绝对路径中的父目录
	}
	public static void method_5(){
		File f1 = new File("C:\\text.java");
		File f2 = new File("C:\\TEXT.java");

		f1.renameTo(f2);
	}
	public static void listRootsDemo(){
		File[] files = File.listRoots();//列出有效盘符。
		for(File f : files){
			show(f);//C,D,E,F
		}

		File f = new File("C:\\");
		String[] names = f.list();//调用list方法的file对象必须是封装了一个目录,该目录还必须存在。
		for(String s: names){
			show(s);//打印硬盘中所有列表。
		}
	}
	public static void method_6(){
		File dir = new File("C:\\");
		String[] arr = dir.list(new FilenameFilter(){
			public boolean accept(File dir,String name)//dir就是上面指定的路径
			{
				return name.endsWith(".bmp");
			}
		});

		for(String name : arr){
			show(name);//打印所有文件
		}
		//----------------------------------
		File dir = new File("C:\\");
		File[] files = dir.listFiles();

		for(File f : files){
			show(f);
		}
	}
	public static void show(Object obj){
		System.out.println(obj);
	}
}

/*
获取指定目录下文件或文件夹,包含子目录中的内容
也就是列出指定目录下的所有内容。

----递归
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
这种表现形式,或者编程手法,叫做递归。

递归要注意:
1.限定条件。
2.递归的次数,避免内存溢出。
*/
import java.io.*;
class FileDemo{
	public static void main(String[] args){
		File dir = new File("D:\\")
		showDir(dir,0);
	}
	public static void showDir(File dir,int level){
		System.out.println(getLevel(level)+dir.getName());

		level++;

		File[] files = dir.listFiles();
		for(int i = 0; i<files.length; i++){
			if(files[i].isDirectory())
				showDir(files[i],level);//递归调用
			else
				System.out.println(getLevel(level)+files[i]);
		}
	}
	/*
		---带层次
		abc
			|---abc.txt
	*/
	public static void getLevel(int level){
		StringBuilder sb = new StringBuilder();
		sb.append("|--");
		for(int i = 0; i < level; i++){
			sb.insert(0,"|  ")
		}
		return sb.toString();
	}
}
/*
删除一个带内容的目录:
删除原理:
在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 i = 0;i < files.length; i++){
			if(!files[i].isHidden()&&files[i].isDirectory())
				removeDir(files[i]);
			else
				System.out.println(files[i].toString()+
						"::" + files[i].delete());
		}
		System.out.println(dir+"::dir::" + dir.delete());
	}
}
/*
将一个指定目录下的java文件的绝对路径,存储到一个文本文件。
建立一个java文件的列表文件。

思路:
1.对指定的目录进行递归。
2.获取递归过程中所有的java文件的路径。
3.将这些路径存储到集合中。
4.将集合中的数据写入到一个文件中。
*/
import java.io.*;
import java.util.*;
class JavaFileLists{
	public static void main(String[] args){
		File dir = new File("D:\\");
		
		List<File> list = new ArrayList<File>();
		fileToList(dir,list);

		System.out.println(list.size());
		
		//存到文件,数据的持久化。
		File file = new File(dir,"javaListFile");
		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 writerToFile(List<File> list,String javaListFile)
			throws IOException{
		BufferedWriter bw = null;
		try{
			bw = new BufferedWriter(new FileWriter(javaListFile));

			for(File f : list)
			{
				String path = f.getAbsolutePath();
				bw.write(path);
				bw.newLine();
				bw.flush();
			}
		}catch (IOException e){
			throw e;
		}finally{
			try{
				if(bw != null)
					bw.close();
			}catch (IOException e){
				throw e;
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值