黑马程序员_基础_IO流学习笔记_File对象功能

-------android培训java培训、期待与您交流!----------

1、创建和删除

File类:文件和目录路径名的抽象表示形式;用来将文件或者文件夹封装成对象;方便对文件与文件夹的属性信息进行操作;可以作为参数传递给流的构造函数。

1、创建:

    boolean  createNewFile():在指定位置创建文件,如果文件已经存在,则不创建,返回false。

                                                       和输出流不一样,输出流对象一建立就创建文件,而且会覆盖已有文件。

    boolean  mkdir():创建文件夹

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

2、删除:

    boolean  delete():删除失败返回false。如果文件正在被使用,则删除不了方法false。

    void  deleteOnExit():在程序退出时删除指定文件。

public static void deleteFile(){
		
		File f = new File("G:\\TestFolder\\file.txt");
		//程序结束的时候将此文件删除,不管程序是否异常退出
		f.deleteOnExit();
		//删除失败返回false
		P.rintln("delete File:" + f.delete());
	}
	
	//File对象的createNewFile():在指定位置创建文件,如果文件已经存在,则不创建 ,返回false。
	//和输出流不一样,输出流对象一建立就会创建文件。而且文件已经存在,会覆盖。
	public static void createNewFile() throws IOException{
		
		File f = new File("G:\\TestFolder\\file.txt");
		P.rintln("create File:" + f.createNewFile());
	}
2、判断文件属性

    boolean  exists():文件是否存在。

    ifFile():是否是文件。

    isDirectory():是否是文件夹。

    isHidden():文件是否隐藏。

下面是一个简单练习及相关要点说明:

public static void judgeFile() throws IOException{
		
		File f = new File("G:\\TestFolder\\file.txt");
		P.rintln("exist:" + f.exists());
		if(!f.exists()){
			f.createNewFile();
		}
		//判断文件是否可执行
		P.rintln("execute:" + f.canExecute());
		
		//mkdir只能创建一级目录,mkdirs能创建多级目录
		File dir = new File("G:\\TestFolder\\folder1\\a\\b\\c\\d");
		P.rintln("mkdirs:" + dir.mkdirs());
		
		//在判断文件对象是否是文件或者目录时,必须要判断该文件对象封装的内容是否存在
		//如果已经存在abc文件夹,则无法创建abc文件,文件夹与文件不能重名
		f = new File("G:\\TestFolder\\abc");
		f.createNewFile();
		P.rintln("isFile:" + f.isFile());
		P.rintln("isAbsolute:" + f.isAbsolute());
	}
3、获取File对象属性

下面是获取File对象的常见方法和一些要点说明:

public static void renameFile(){
		
		File f1 = new File("G:\\TestFolder\\Test.java");
		File f2 = new File("G:\\TestFolder\\Test_Temp.java");
		P.rintln("rename:" + f1.renameTo(f2));
		
		f1 = new File("G:\\TestFolder\\Test2.java");
		f2 = new File("D:\\Test.java");
		P.rintln("rename:" + f1.renameTo(f2));	//会将文件移动到D盘并改名
	}
	
public static void getFileInfo() throws IOException{
		
	File f = new File("G:\\TestFolder\\Test.java");
	Calendar cd = Calendar.getInstance();
	cd.setTimeInMillis(f.lastModified());		//获取最后修改时间的毫秒值
		
	P.rintln("文件名:" + f.getName());
	P.rintln("文件路径:" + f.getPath());	//获取封装时的文件路径
	P.rintln("父目录:" + f.getParent());	//File对象没有封装绝对路径,则返回null。如果相对路径中有上一层目录,则返回此目录
	P.rintln("绝对路径名字符串:" + f.getAbsolutePath());	//使用相对路径创建的文件,可使用此方法获取绝对路径
	P.rintln("绝对路径名形式:" + f.getAbsoluteFile());  //此方法返回的是File对象
	P.rintln("最后修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cd.getTime()));	//格式化输出最后修改时间
	P.rintln("文件大小:" + f.length());		//返回的是字节数
}
4、列出指定目录下指定文件

下面是测试代码及要点说明

//listFiles()列出指定目录下所有文件和文件夹,包含隐藏文件,返回的是File对象数组
	public static void listFiles(){
		
		File dir = new File("G:\\TestFolder");
		File[] files = dir.listFiles();
		for(File file : files){
			P.rintln("文件名:" + file.getName() + " 文件大小:" + file.length());
		}
		
		P.rintln("----------------当前目录下的所有java文件--------------------");
		
		files = dir.listFiles(new FilenameFilter(){		//使用过滤器只列出java文件
			public boolean accept(File dir, String name){
				return name.endsWith(".java");
			}
		});
		for(File file : files){
			P.rintln("文件名:" + file.getName() + " 文件大小:" + file.length());
		}
	}
	
	//list()列出指定目录下所有文件和文件夹,包含隐藏文件,返回的是String数组
	public static void list(){
		
		File file = new File("G:\\TestFolder");
		//调用list方法的File对象必须是封装了一个目录,该目录必须存在
		String[] ss = file.list();
		for(String name : ss){
			P.rintln(name);
		}
		
		P.rintln("----------------当前目录下的所有java文件--------------------");
		
		file = new File("G:\\TestFolder");
		ss = file.list(new FilenameFilter(){	//使用过滤器只列出java文件
			public boolean accept(File dir, String name){
//				if(name.endsWith(".java") || name.endsWith(".txt"))
//					return true;
//				return false;
				return name.endsWith(".java");
			}
		});
		for(String name : ss){
			P.rintln(name);
		}
		
	}
	
	public static void listRoots(){
		
		File[] files = File.listRoots();
		for(File file : files){		//列出电脑中所有盘符
			P.rintln(file);
			P.rintln(file.length());
		}
	}

5、列出目录下所有文件及文件夹包含子目录中的文件

下面是使用递推方法列出指定目录下所有文件及文件夹

        public ArrayList<File> lists = new ArrayList<File>();
	
	public static void main(String[] args) throws IOException {
		
		callListAll();
	}
	
	//调用listFilesAll方法显示指定目录下所有文件及文件夹
	public static void callListAll() throws FileNotFoundException{
		
		PrintStream ps = new PrintStream("D:\\file.log");
		System.setOut(ps);		//将file.log文件作为标准输出
		
		IO_08_FileObject io = new IO_08_FileObject();
		File f = new File("F:\\Program Files\\apache-jmeter-2.10");
		String str = "\\" + "\\";
		io.listFilesAll(f);		//将目录结构存放到list中
		for(Iterator<File> i = io.lists.iterator(); i.hasNext();){
			File file = i.next();
			if(file.isDirectory()){
				if(file.getAbsolutePath().equals("F:\\Program Files\\apache-jmeter-2.10")){
					P.rintln(file.getAbsolutePath());
				}
				else{
					String[] strs = (file.getAbsolutePath()).split(str);
					P.rintln(fillLine(strs.length - 3) + file.getName());
				}
			}
			else{
				String[] strs = (file.getParent()).split(str);
				P.rintln(fillLine(strs.length - 2) + file.getName());
			}
//			P.rintln(file.getAbsolutePath() + "  ---  " + (file.isFile() ? "文件" : "文件夹"));
		}
	}
	
	public static StringBuffer fillLine(int num){
		
		if(num <= 0){
			return new StringBuffer("");
		}
		if(num == 1){
			return new StringBuffer("|--");
		}
		return fillLine(num - 1).insert(0, "|  ");
	}
	
	//列出指定目录下文件或者文件夹,包含子目录的内容。也就是列出指定目录下所有内容
	//函数自身调用自身,这种表现形式,或者变成手法,称为递归
	//递归要注意:1、限定条件 2、要注意递归次数,尽量避免内存溢出
	public void listFilesAll(File dir){
		lists.add(dir);
		File[] files = dir.listFiles();
		for(File file : files){
			if(file.isDirectory()){
				listFilesAll(file);
			}
			else{
				lists.add(file);
			}
//			lists.add(file);		//这里最后才将文件夹add到list中,打印显示的时候不协调
		}
	}
file.log中显示效果


6、删除带内容的目录

public static void main(String[] args) throws IOException {
		
		File file = new File("G:\\TestFolder\\folder");
		long start = System.currentTimeMillis();
		removeFolder(file);
		long end = System.currentTimeMillis();
		P.rintln("耗时:" + (end - start) + "毫秒");
	}
	
	//删除一个带内容的目录。删除原理:在window中,删除目录从里面往外删除
	//既然从里往外删除,就需要用到递归
	public static void removeFolder(File dir){
		
		File[] files = dir.listFiles();
		for(File file : files){
			if(file.isDirectory()){
				removeFolder(file);		//若文件夹不为空,再次调用此方法先删除文件夹中的文件
			}
			else{
				file.delete();		//直接删除文件
			}
		}
		dir.delete();	//将文件夹中的文件删除之后再删除文件夹
	}
7、创建Java文件列表

public static void main(String[] args) throws IOException {
		
		List<File> list = new ArrayList<File>();
		fileToList(new File("G:\\Workspaces"), list);
		writeToFile(list, "D:\\java2.log");
	}
	
	public static void writeToFile(List<File> list, String fileName){
		
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(fileName));
			for(File file : list){
				String path = file.getAbsolutePath();
				bw.write(path);
				bw.newLine();
				bw.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(bw != null){
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	
	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")){	//如果是java文件就存储到list中
					list.add(file);
				}
			}
		}
	}

------- android培训java培训、期待与您交流! ----------详细请查看: www.itheima.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值