天天看点

File文件对象概述

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

1. File把文件或者文件夹封装为对象  :

例子:

File f1=new File("2.txt");

File f2=new File("c:\\2.txt");

File f3=new File("c:\\abc","4.txt");

File d=new File("bcd");

File f4=new File(d,"1.txt");

System.out.println(f1) 

注意:File文件里封装的是什么路径,就打印什么路径

File.separator()目录分隔符,在什么系统都通用

2 File类的常见方法

   2.1)创建   

boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false ,和输出流不一样,输出流对象一建立就创建文件,而且文件如果已经存在,会覆盖

boolena mkdir():创建文件夹

boolewn mkdirs()  创建多级文件夹

   2.2)删除:  

boolean delete();  删除失败返回false

void deleteOnExit()   在程序退出时删除指定文件,防止发生异常时文件没有删除

   2.3)判断

boolean exists()  文件是否存在

isFile();        判断是否文件

isDirectory();   判断是否目录

isHidden();     判断是否隐藏文件

isAbsolute();   判断是否绝对路径

   2.4)获取信息

getName();  //获取文件名

getPath();  //获取相对路径

getParent(); //获取相对路径的父目录,如果没有父目录反为null

getAbsolutePath();  //获取文件的绝对路径

long lastModified();  //获取最后修改时间  long

long length()    //获取文件大小 long

   2.5)File其他方法:

      2.5.1)renameTo();

File f1=new File("c://test.java");

File f2=new File("c://haha.java");

f1.renameTo(f2);  //会把test.java的文件名改为haha.java

File f1=new File("c://test.java");

File f2=new File("d://haha.java");

f1.renameTo(f2);   //运行结果是C盘下的test.java没了,d盘下面会有jaja.java类似于剪切

      2.5.2)listRoots()  列出系统的根目录 

File files=new File();

例子:

for(File f:files.listRoots())

{

System.out.println(f);  //打印结果是系统的根目录盘符

}

      2.5.2) list()  列出当前目录的所有文件,包括隐藏文件,调用该方法的File对象必须是封装了一个目录,

该目录必须存在,否则会抛出空指针异常,因为高级for循环调用了length()方法

例子:File f=new File("c:\\abc");

String[] arr=f.list()

for(String s:arr)

{

System.out.println(s);

}

      2.5.3)注意:开发一般用listFiles()

 File[] listFiles()返回一个File数组对象,操作跟上面的list()是一样的

3  过滤当前目录,不用的文件FilenameFileter是一个接口,要复写accept方法

accept(File dir,String name)

 String[] arr=list(FilenameFilter f)

例子:过滤指定文件
File f=new File("c:\\abc");
String[] arr=f.list(new FilenameFileter() //传了匿名内部类,复写accept方法
public boolean accept(File dir,String name)//dir是要过滤的目录,name是要过滤的文件
{
	return name.endsWith(".bmp");
}
);
for(String s:arr)
{
	System.out.println(s);
}
           

4递归

要求:列出指定目录下文件或者文件夹,包含子目录中的内容,也就是列出指定目录下所有内容

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

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

也就是函数自身调用自身

这种表现形式,或者变成手法,称为递归

递归要注意:

限定条件

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

/*
例子:
列出当前目录的所有文件
*/
import java.io.*;
class FileDemo
{
	public static void main(String[] args)throws IOException
	{
		File dir=new File("E:\\Java\\jdk1.6.0_23\\experience_heima");
	
		getDir(dir);
		//这个函数是让程序的目录带|--层次
	public static String getLevel(int level)
	{
		StringBuilder sb=new StringBuilder();
		for(int x=0;x<levev;x++)
		{
			sb.append("|--");
		}
		return sb.toString();
	}
	}
		//打印文件
		public static void getDir(File files,int level)
		{
			System.out.println(getLevel(level)+files);
			level++;
			File[] dir=files.listFiles();
			for(int x=0;x<dir.length;x++)
			{
				if(dir[x].isFile())
				System.out.println(getLevel(level)dir[x]);
				else
				getDir(dir[x],level);	
			}
		}
}
           
/*
获取指定目录的所有java文件,存到集合里
遍历集合java文件名存放在指定目录下
*/

import java.io.*;
import java.util.*;
class FileDemo1
{
	public static void main(String[] args)throws IOException
	{

		File files=new File("E:\\Java\\jdk1.6.0_23");
	
		ArrayList<File> list=new ArrayList<File>();
	
		getFile(files,list);
		String s="E:\\Java\\jdk1.6.0_23\\66.txt";
		getList(list,s);
	}

	//遍历指定目录的所有java文件,然后把java文件存储在list集合
	public static void getFile(File files,ArrayList<File> list)
	{
		File[] dir=files.listFiles();
		for(File f:dir)
		{
			if(f.isDirectory())
			getFile(f,list);//如果是目录再次调用函数
			else
			{
				if(f.getName().endsWith(".java"))//判断文件对象的文件名是否是以java后缀名结尾
				list.add(f);//把符合条件的文件对象存储进集合
			}
		}
	}

//遍历list集合,把java文件的文件名写进指定目录里去
public static void getList(ArrayList<File> list,String fileName)throws IOException
	{
	BufferedWriter buw=null;
	try
	{
	buw=new BufferedWriter(new FileWriter(fileName));
	for(File al:list)
	{
	buw.write(al.getName()); //把文件名写到指定目录
	buw.newLine(); //换行
	buw.flush();//刷新
	}
	}
	catch(IOException e)
	{
	throw new IOException();
	}
	
	finally
	{
	if(buw!=null);
	try
	{
	buw.close();
	}
	catch(IOException e)
	{
	throw new IOException();
	}
	}
	
	}
}
           

5 Properties是hashtable的子类,是Map体系的

也就是说具备map集合的特点,而且它里面存储的键值对都是字符串

是集合中和io技术结合的集合容器

5.1)该对象的特点:可以用于键值对形式的配置文件

那么在加载时,需要数据有固定格式:键=值

5.2)Properties使用:

Properties pro=new Properties();

pro.setProperty("zhangsan","30");//设置信息

pro.setProperty("lisi","35");

pro.getProperty("zhangsan");//获取信息

Set<String> names=pro.stringPropertyNames();//获取所有的键,返回set集合

for(String s:names)

{

System.out.println(s+":"+pro.getProperty(s));

}

/*
例子:
演示流中的数据存储到集合,
把集合的数据存储到流对象
*/
import java.util.*;
import java.io.*;
class PropertiesDemo2
{
	public static void main(String[] args)throws IOException
	{
		Properties pro=new Properties();
		FileInputStream fis=new FileInputStream("info.txt");
		pro.load(fis);//把输入流传进来,可以把文件里的信息变成键值对,存储在集合里
	
		pro.setProperty("zhangsan",8);//改变集合的键值对,但是文本文件里的键值对没有修改到,这时就要用到store(OutSteram out ,String s)方法

		FileOutputStream fos=new FileOutputStream("info.txt");
		pro.store(fos,"haha");//接受一个输出流和字符串,字符串是备注信息,不写也行
		pro.list(System.out);//打印集合到控制台,list(PrintStream p)
		fos.close();
		fis.close();	
		//load(InputStream ins)的原理
		/*
		BufferedReader bufr=new BufferedReader(new FileReader("C:\\info.txt"));
		String s=null;
		while((s=bufr.readLine())!=null)
		{
			String[] s1=s.split("=");	
		pro.setProperty(s1[0],s1[1]);
		}
		bufr.close();
		System.out.println(pro);
		*/
	}
}
           

6 PrintWriter字符打印流

6.1)构造函数可以接受的参数类型

  file对象    File

  字符串路径  String

  字节输出流  OutputStream

  字符输出流  Writer

6.2)PrintWriter pw=new PrintWriter(System.out,true);//true代表调用println()方法时可以自动刷新缓冲区,

只有传入流对象才能输入true和false,比如说这样就不能因为1.txt不是一个流对象,把文本文件封装成流对象传进来就行了:

PrintWriter pw=new PrintWriter(1.txt,true);

pw.println()//可以自动换行

6.3)PrintStream字节打印流

构造函数可以接受的参数类型

  file对象    File

  字符串路径  String

  字节输出流  OutputStream

7 SequenceInputStream()合并流

/*
SequenceInputStream类的用法:把3个流对象,写入到一个目的文件,多个源文件和一个目的文件
*/
class SequenceInputDemo
{
	public static void main(String[] args)
	{
		Vector<FileInputStram> v=new Vector<FileInputStram>();
		v.add(new FileInputStream("c:\\1.txt"));
		v.add(new FileInputStream("c:\\2.txt"));
		v.add(new FileInputStream("c:\\3.txt"));
		Enumeration<FileInputStream> en=v.elements();
		SequenceInputStream sie=new SequenceInputStream(en);
		FileOutputStream fos=new FileOutputStream("c:\\4.txt");

		byte[] buf=new byte[1024];
		int len=0;
		while((len=sis.read(buf))!=-1)
		{
			fos.write(buf,0,len);
		}

		fos.close();
		sis.close();
	}
}
           

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