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培训 、期待与您交流! ----------

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值