java基础--IO流之File类

一、File类概述

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

 

二、File类常见方法:

1,创建

boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返false,  和输出流不一样,

输出流对象一建立创建文件,而且文件已经存在,会覆盖。

boolean mkdir():创建文件夹。

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

 

2,删除

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

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

 

3,判断

boolean exists() :文件是否存在.记住在判断文件对象是否是文件或者路径时,

   必须要先判断该文件对象封装的内容是否存在。

isFile(): isDirectory();isHidden();isAbsolute();

 

4,获取信息

getName():  getPath():     getAbsolutePath()   long lastModified()   long length()

getParent():该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。七


File常见方法演示代码

package cn.xushuai.io;
import java.io.*;

class FileDemo {
	public static void main(String[] args) throws IOException{
		method_1();
		//method_5();
	}

	public static void method_1()throws IOException{
		File f = new File("file.txt");
//		sop("create:"+f.createNewFile());//创建文件,如果已存在,则不再创建
		//sop("delete:"+f.delete());	//删除文件
	}

	public static void method_2(){
		File f = new File("file.txt");
		//sop("exists:"+f.exists());
		//sop("execute:"+f.canExecute());
		//创建多级文件夹
		File dir = new File("abc\\kkk\\a\\a\\dd\\ee\\qq\\aaa");
		sop("mkdir:"+dir.mkdirs());
	}
	
	public static void method_3()throws IOException{
		File f = new File("d:\\java1223\\day20\\file2.txt");

		//f.createNewFile();
		//f.mkdir();
		//记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。
		//通过exists判断。
		sop("dir:"+f.isDirectory());
		sop("file:"+f.isFile());
		sop(f.isAbsolute());//文件不存在。也可以
	}
	
	public static void method_4(){
		File f = new File("file.txt");
		sop("path:"+f.getPath());//返回所封装的路劲
		sop("abspath:"+f.getAbsolutePath());	//获取绝对路径,即使是相对的路径也可以
		
		sop("parent:"+f.getParent());//该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。
									//如果相对路径中有上一层目录,那么该目录就是返回结果。

	}
	
	public static void method_5(){
		File f1 = new File("c:\\Test.java");
		File f2 = new File("d:\\hahah.java");
		sop("rename:"+f2.renameTo(f1));//重新命名此抽象路径名表示的文件

	}

	public static void sop(Object obj){
		System.out.println(obj);
	}
}


File练习


练习一:获取文件列表:

package cn.xushuai.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Iterator;

public class FileDemo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//listRootsDemo();
		listFileDemo();
		//listDemo();
		//listFilterDemo();
	}
	
	//列出可用的文件系统根
	public static void listRootsDemo(){
		File[] files = File.listRoots();	
		for (File file : files) {
			System.out.print(file);
		}
	}
	
	//返回一个文件对象数组
	public static void listFileDemo(){
		File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\day20");
		File[]  files = file.listFiles();
		for(File f : files){
			
			System.out.println(f+"...."+f.getName()+"....."+f.length());
		}
	}
		public static void listDemo(){
		File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\day20");
//返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
		String[] names = file.list();	//调用list方法的file对象必须是封装了一个目录。该目录还必须存在
		
		for(String name: names){
			System.out.println(name);
		}
	}
	
	//获取指定文件类型的文件
	public static void listFilterDemo(){
		File dir = new File("D:\\Java\\java课程\\毕向东\\Java基础\\Java基础源代码\\day14");
		
		String[] names = dir.list(new FilenameFilter(){		
				public boolean accept(File dir,String name){	
					//System.out.println("dir:"+dir+"....name::"+name);
					/*if(name.endsWith(".java"))
						return true;
					else
						return false;*/
					return name.endsWith(".java");
				}
				
		});
		
		for(String name : names){
			System.out.println(name);
		}
	}
}


练习二:列出指定目录下文件或者文件夹,包含子目录中的内容


示例说明:

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。

在列出过程中出现的还是目录的话,还可以再次调用本功能。

也就是函数自身调用自身。

这种表现形式,或者编程手法,称为递归。


递归注意事项:

1,限定条件

2,要注意递归的次数。尽量避免内存溢出。

由于在没有符合限定条件时,每次调用都会开辟一个新的内存空间由于存放方法,

但是这些内存都不能释放。只有符合限定条件,才能一步步往回执行,占用大量内存


package cn.xushuai.io;
import java.io.File;

public class FileDemo3 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\Java基础源代码");
		//showDir(file);
		System.out.println(getSum(10));		
		showDir(file,0);
	}

	//通过递归列出某个文件夹下的所有内容
	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].getName()+"....");
		}
	}
	//在列表前添加级数
	public static String getLevel(int level){
		StringBuilder sb = new StringBuilder();
		sb.append("|--");
		for(int i=0;i<level;i++){
			sb.insert(0,"| ");
		}
		return sb.toString();
	}


练习三:将一个指定路径下的文件列表写入到一个本地文件中

 这里将指定路径下的所有文件对象先存储到集合中去,然后将集合中的对象写入到本地文件:对象的持久化

存入集合是为了可以有更多的操作选择,打印,写入都可。


思路:

1,对指定的目录进行递归。

2,获取递归过程所以的java文件的路径。

3,将这些路径存储到集合中。

4,将集合中的数据写入到一个文件中。


package cn.xushuai.io;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class JavaFileList {

	public static void main(String[] args) {
		List<File> list = new ArrayList<File>();	
		File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\Java基础源代码\\day20");	
		File file2 = new File("c:\\javalist2.txt");		
		list = file2List(list,file);
		try {
			write2File(list,file2.toString());
		} catch (IOException e) {
			System.out.println("写入失败!");
		}
	}

//将文件内容存入集合
	public static List file2List(List list,File dir){	
		File[] files = dir.listFiles();
		
		for(int x=0;x<files.length;x++){
			
			if(files[x].isDirectory())
				file2List(list,files[x]);
			else{
				if(files[x].getName().endsWith(".java"))
					list.add(files[x]);
				
			}
		}
		return list;
		
	}
	
	//将集合中的内容存入文件
	public static void write2File(List<File> list,String fileName)throws IOException{
		
		BufferedWriter bufr = null;
		
		try {
			bufr = new BufferedWriter(new FileWriter(fileName));
			for(File f : list){	
				String path = f.getAbsolutePath();
				bufr.write(path);
				//bufr.write(f.toString());
				bufr.newLine();
				bufr.flush();
			}
		} catch (IOException e) {
			throw e;
		}finally{
			
			if(bufr!=null)
				try {
					bufr.close();
				} catch (IOException e) {
					throw e;
				}
		}	
	}
}

练习四、删除带内容的目录


删除原理:

在window中,删除目录从里面往外删除的

既然是从里往外删除。就需要用到递归


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());
	}
}

posted @ 2012-11-21 18:08  积小流,成江海  阅读(171)  评论(0编辑  收藏  举报