<span style="font-size:14px;">------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------</span>
File类
一:概述
将文件或者文件夹封装成对象的类
特点:
(1)用来将文件或文件夹封装成对象
(2)方便于对文件与文件夹的属性信息进行操作
(3)File类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变
(4)File对象可以作为参数传递给流的构造函数
(5)了解File类中的常见用法
二:File对象创建
方式一://将a.txt封装成File对象。可以将已有的和未出现的文件或者文件夹封装成对象。
File f =new File("a.txt");
方式二:
//将文件所在目录路径和文件一起传入,指定文件路径。
File f2=newFile("c:\\abc","b.txt");
方式三:
//将文件目录路径封装成对象。再创建文件对象。降低了文件于父目录的关联性。
File d=new File("c:\\abc");
File f3=new File(d,"c.txt");
注:File.separator表示目录分隔符,可以跨平台使用。相当于路径中的“\”,因为在windows和linux系统中的分隔符不一样
三:File类的常见方法
1.创建
//在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
//和输出流不一样,输出流对象一建立就创建文件。而且文件已经存在,会覆盖。
boolean createNewFile();
boolean mkdir();//创建文件夹,只能创建一级文件夹
boolean mkdirs();//创建多级文件夹
例: File dir=new File("abc");
dir.mkdir();//创建abc这个文件夹
2.删除
boolean delete();//删除文件或目录。文件存在,返回true;文件不存在或者正在被执行,返回false。
void deleteOnExit();//在程序退出时删除指定文件
3.判断
boolean canExecute();//是否是可执行文件
boolean exists();//文件是否存在!!!
boolean isFile();//是否是文件
boolean isDirectory();//是否是文件夹
boolean isHidden();//是否是隐藏文件
boolean isAbsolute();//文件是否是绝对路径,文件不存在也能判断
记住!!!在判断文件对象是否是文件或者目录时,必须要判断该文件对象封装的内容是否存在。通过exists()方法判断。
4.获取信息
String getName();//获取文件名
String getPath();//获取文件的相对路径(即创建的对象传入的参数是什么就获取到什么)
String getParent();//获取文件父目录。返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。如果相对路径中有上一层目录,那么该目录就是返回结果。
String getAbsolutePath();//获取文件的绝对路径
long lastModified();//返回文件最后一次被修改的时间
long length();//返回文件长度
boolean renameTo(File dest)重新命名此抽象路径名表示的文件,相当于剪切文件
dest - 指定文件的新抽象路径名
renameTo例子:
File f1=new File("c:\\Test.java");
File f2=new File("d:\\Test.java");
f1.renameTo(f2);
5.列出文件及文件过滤
static File[] listRoots();//列出可用的文件系统根目录,即系统盘符,安装程序时候获取有效盘符,或者将特定文件存在指定的系统盘中
String[] list();//列出当前目录下所有文件,包括隐藏文件。调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
文件名过滤:
String[]list(FilenameFilter filter);//返回一个字符串数组,获取目录中满足指定过滤器的文件或目录。
//FilenameFilter:文件名过滤器,是一个接口,其中包含一个方法,accept(Filedir,String name),返回的是boolean型,对不符合条件的文件过滤掉。
例子:Day20\FileDemo2.java
File[] listFiles();//返回一个抽象路径名数组,获取当前文件夹下的所有文件和文件夹
File[] ListFiles(FilenameFilterfilter);//返回抽象路径名数组,获取目录中满足指定过滤器的文件或目录。
四:递归
要求:列出指定目录下文件或者文件夹,包含子目录中的内容。也就是列出指定目录下所有内容。因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种表现形式,或者编程手法,称为递归。
实例1: Day20\FileDemo3.java
实例2:Day20\RemoveDir.java //了解
删除一个带内容的目录。
删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归。
实例3:Day20\JavaFileList.java 必须掌握!!!
将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
建立一个java文件列表文件。
思路:
(1)对指定的目录进行递归。
(2)获取递归过程所以的java文件的路径。
(3)将这些路径存储到集合中。
(4)将集合中的数据写入到一个文件中。
递归要求:
1.限定条件。
2.要注意递归的次数。尽量避免内存溢出。
图示:递归.bmp 递归2.bmp
Properties类
一:概述
Properties是Hashtable的子类,它具备Map集合的特点。而且它里面还有存储的键值对,都是字符串,无泛型定义。
是集合中和IO技术想结合的集合容器。
该对象的特点:
(1)可用于键值对形式的配置文件
(2)在加载时,需要数据有固定的格式,常用的是:键=值
二:特有方法
1.设置
Object setProperty(String key,String value); //设置键和值,调用Hashtable的方法put
2.获取
String getProperty(String key); //指定key搜索valueSet<String> stringPropertyName();//返回属性列表的键集,存入Set集合
3.加载流和存入流
void load(InputStream ism);//从输入字节流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。void load(Readerreader);//从输入字符流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
voidlist(PrintStream out);//将属性列表输出到指定的输出流
void store(OutputStreamout,String comments);//对应load(InputStream )将属性列表(键值对)写入输出流。comments属性列表的描述。
void store(Writerwriter, String comments); //对应load(Reader)将属性列表(键值对)写入输出流。comments属性列表的描述。
实例:基础:Day20\PropertiesDemo.java !!!
练习: Day20\RunCount.java !!!掌握
用于记录应用程序运行次数。如果使用次数已到,那么给出注册提示。
分析:
很容易想到的是:计数器。
可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。
可是随着该应用程序的退出,该计数器也在内存中消失了。
下一次在启动该程序,又重新开始从0计数。
这样不是我们想要的。
程序即使结束,该计数器的值也存在。
下次程序启动在会先加载该计数器的值并加1后在重新存储起来。
所以要建立一个配置文件。用于记录该软件的使用次数。
该配置文件使用键值对的形式。
这样便于阅读数据,并操作数据。
键值对数据是map集合。
数据是以文件形式存储,使用io技术。
那么map+io -->properties.
配置文件可以实现应用程序数据的共享。
打印流
--能保证数据原样性将数据打印出去。而int来说,打印的是最低8位。
一:概述打印流包括:PrintStream和PrintWriter
该流提供了打印方法,可将各种类型的数据都原样打印。
二:字节打印流:PrintStream --OutputStream的子类
构造方法中可接收的参数类型:记住!!!
1.File对象:File
2.字符串路径:String
3.字符输出流:OutputStream
三:字符串打印流:PrintWriter--非常常用!!!
构造方法中可接受的参数类型
1.File对象:File
2.字符串路径:String
3.字节输出流:OutputStream
4.带参数字节输出流:OutputStream out, boolean autoFlush
5.字符输出流:Writer
6.带参数字符输出流:Writer writer, boolean autoFlush
实例:Day20\PrintStreamDemo.java
序列流
一:概述
1.SequenceInputStream对多个流进行合并。也被称为合并流。
2.常用构造函数
SequenceInputStream(Enumeration<?extends FileInputStream> e)
SequenceInputStream(InputStream s1, InputStream s2)
二:常见合并多个流文件步骤
1.创建集合,并将流对象添加进集合
2.创建Enumeration对象,将集合元素加入。
3.创建SequenceInputStream对象,合并流对象
4.创建写入流对象,FileOutputStream关联写入文件
5.利用SequenceInputStream对象和FileOutputStream对象读数据进行反复读写操作。
示例:Day20\SequenceDemo.java
Day20\SplitFile.java