---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
摘要(IO流操作规律--File类---递归----Propertise(集合))
IO流操作规范
|--源: InputStream Reader
|--目的: OutputStream Writer
通过三个明确来完成
|--明确元和目的
|--源: InputStream Reade
|--目的: OutputStream Writer
|--操作的是否是纯文本
|--是:字符流
|--否:字节流
|--明确使用哪个具体对象
|--源:内存,硬盘,键盘
|--目的:内存,硬盘,控制台
例:
将一个文本文件中的数据储存到另一个文件中
分析:
源:-->文本文件-->硬盘 -->Reader -->FileReader --->BufferedReader(增强)
目的:-->文本文件-->硬盘--->Writer --->FileWriter --->BufferedWriter(增强)
File类:用于将文件或者文件夹(地址)封装成对象,方便对其操作
|--File对象可以作为参数传递给流的构造函数
|--创建File对象,将指定参数封装成file对象(已有或者没有的文件,文件夹,都可以封装成对象)
例如:
File f = new File("a.txt");//不管文件或者文件夹(地址)是否存在,都将其封装成对象
File f = new File("C:\\abc","Deme.txt");//文件和地址分成两个参数,封装成对象
常用的操作方法:
|--创建:
|--创建多级目录:boolean mkdirs()
|--创建单级目录:boolean mkder()
|--指定位置创建文件,若文件已存在(只比较名,不管什么类型文件),则不创建,返回flase,若路径不存在也创建失败
boolean createNewFile()
|--删除:
|--删除指定文件:boolean delete()
|--在程序退出时删除指定文件:void deleteOnExit()
|--判断:
|--文件是否可执行:boolean canExecute()
|--文件或路径是否存在:boolean exists()
|--是否是一个文件夹(路径):boolean isDirectory()
|--是否是文件:boolean isFile()
|--是不是隐藏文件:boolean isHidden()
|--是不是绝对路径:boolean isAbsolute()
|--获取:
|--获取文件或文件夹名:String getName()
|--获取路径名,相对路径返回相对路径名:String getpath()
|--获取父目录路径名,相对路径为null:String getparent()
|--获取绝对路径,不管是不是相对路径:String getAbsolutePath()
|--获取最后一次修改时间:long lastModified()
|--获取文件长度:long length()
|--重命名:boolean renameTo(File dest)
|--获取根目录(可用的):File listRoots()
|--获取指定目录下的文件和文件夹名(包括隐藏的),若指定目录不存在返回null,若目录下没有文件或文件夹
返回0
String[] list()
例:
File f = new File("c:\\"); //将指定文件或目录封装为对象
String [] s = f.list(); //调用list方法,获取指定目录下的文件和文件夹名.让字符串数组记录
for(String z : s)
{
System.out.println(z);
}
|--将指定目录下的文件封装成对象
File[] listFiles(FileFilter filter)
|--获取指定目录下满足某条件的文件或文件夹名
String[] list(FilenameFilter filter)
递归:即方法的内部,调用自身方法的形式
递归注意事项:
|--限定条件(避免死循环)
|--注意递归次数(避免占内存溢出)
例:
class Demo2
{
public static void main(String[] args)
{
toBin(6)
}
public static void toBin(int num)
{
if(num>0)
{
toBin(num/2);
System.out.println(num%2);
}
}
}
结果: 1
1
0
图例:
练习:删除带内容的目录
原理:在windows中,删除目录是从里向外删除的(最里边的文件开始删除,逐级向外删除)
概要:利用递归原理实现从里向外删除
class Demo2
{
public static void main(String[] args)
{
File dir = new File("d:\\"); //将路径封装成对象
removeDir(dir); //调用删除方法
}
public static void removeDir(File dir) //自制删除带内容目录方法
{
File[] files = dir.listFiles(); //先将目录下文件和文件夹封装成对象,装入数组
for(int x =0;x<files.length;x++) //循环 到 数组长度
{
if(file[x].isDirectory()) //如果某个元素是一个路径
removeDir(file[x]); //再调用自身方法 把这个路径传入,再循环
else
System.out.println(file[x].toString()+"::"+files[x].delete()); //若不是路径,则打印,并删除
}
Sop(dir+"::"+dir.delete());//循环完后。目录下已无文件和文件夹,则可删除该目录了
}
}
Propertise类:是Map集合中Hashtable的子类,所以具备了map集合的特点,且存储的键值对都是字符串
加载数据时,需要数据有固定格式 : 键 = 值 如 "abc" = 123
特点:
|--是集合和IO技术相结合的集合容器
|--可以用来以键值对的形式配置文件
特有方法:将键存入Set集合中: Set<String> stringPropertyNames()
例:存入配置文件(字符流举例)
摘要:文件类的数据格式必须是键值对的形式如 "a" = 10
BufferedReader bufr = new BufferedReader(new FileReader("Demo.txt"));
String line = null;
Properties prop = new Properties();//建立pro类对象
while ((line= bufr.readLine())!=null)
{
String[] arr = line.split("=");//切开"="号
prop.setProperty(arr[0],arr[1]);//将每次被切开的内容,分别当键和值 存入pro集合中
}
bufr.close()
例:取出和修改(字节流举例)
FileInputStream fis = new FileInputStream("Demo.txt");
Properties prop = new Properties();//建立pro类对象
prop.load(fis); //load方法 实现直接将InputStream流中的数据,存入pro集合中
FileOutputStream fos = new FileOutputStream("Demo.txt");
prop.store(fos,"haha"); //store方法 实现将pro集合中的数据 直接写入流所指定的文件中
//"哈哈"为注释信息,读取时pro不会识别
fos.close();
fis.colse();
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------