File类:
将文件或文件夹封装成对象。
方便对文件与文件夹的属性进行操作。
File对象可以作为参数传递给流的构造函数。
流不能操作的文件夹,不能操作文件的属性信息,流只能操作数据。
字段摘要:static String separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
构造函数:
File(File parent, String child)
:将目录名和文件名分开。可以使文件名变成变量。
作为变量参数使用。
例:File f1 = new
File("D:","00"+File.separator+"f.txt");
File方法。
创建:
createNewFile(),文件已存在不创建并返回false.
creatTemFile(String,String):前缀名和后缀名(如.temp)
creatTemFiel(String,String,StringDir);可以指定路径名,想恶心百度。
创建目录:
mkdir();这破名子起的!!
删除:
delete:删除文件。
void
deleteOnExit():在虚拟机退出的时候,删除。因为有时候出现异常,代码跳转,执行不到删除功能,即使放在finally里也不行(执行中的代码无法删除)。
一般临时文件用
判断:
canExcute():是否可执行。()没有createNewFile之前不可以执行
int compareTo(File pathname) 比较文件名。
exists:是否存在。
isFile:是否是文件 ,常用,在判断是否是文件或目录时,一定要判断是否存在,要严谨。
ifDirectory:是否是目录
isHiddem:是否隐藏。隐藏文件java访问不了。
isAbsolute:是否是绝对路径 *
获取信息:
getPath
getAbsolutePath 返回字符串
getAbsoluteFile 返回file
getName
length:返回long类型,比读取流的avalible更大。
特殊:getparent:返回父目录字符串形式
如果没有明确指定上一次父目录,则返回null
如果是相相对路径,则返回null,如果相对路径有上一次目录,则不为null
getParentFile:返回file对象
long
lastModified() :返回前一次修改的时间。查看是否被别人修改过
文件覆盖的原理:先判断文件是否存在,再删除。先删后创建。
特殊: boolean
renameTo(File dest) 传入的参数是file
static File[] listRoots() ;返回的是数组
列出可用的文件系统根。即所有的盘符。
应用:在存储文件时,最好先列出用户的盘符
注意重要:
2.0 f1.list():返回String[]
,调用list的对象f1必须封装了一个目录,该目录还必须存在
列出全部目录和全部文件, 包括隐藏文件
2.1 list(FilenameFilter
filter);文件名过滤
返回符合过滤器的文件或文件名 String[]
accept():boolean accept(File dir, String name)
应用:列出某个文件下的所有.txt文件。但是只能应用一级目录,列出所有要用到递归。
例子:
String[] names2 = f2.list(new FilenameFilter(){
public boolean accept(File f2,String str){//复写方法
System.out.println("str....."+str);//str就是f2中的所有文件,所以可以用str来判断。
return str.endsWith(".txt");//只保留.txt文件。
}
});
3.1 listFiles():返回指定目录下的文件名。
3.2 listFiles(FilenameFilter
filter);
3.3 listFiles(FileFilter
filter);
--指定文件或文件名,其余全过滤掉。FileFilter接口,一个accept方法。
boolean
accept(File pathname) ;注意返回值d
例子:
File f3 = new File("d:\\");
File[] files3 = f3.listFiles(new FilenameFilter(){
public boolean accept(File f3,String name){
return name.endsWith(".txt");//只有当返回值问true是才会,路径名才满足过滤器。
//返回值为null.
// return false;
}
});
注:
1.list和listFiles的区别:返回值不一样,返回的file对象还可以在获取或判断等。listFiles方法更好。
2. 过滤可以获取一个目录下的.txt文件.递归也可以.有什么区别?过滤好像只能获取制定的目录而无法继续递归下一级目录.
递归:
列出制定目录下文件或者文件夹,包含子目录中的内容。也就是所有的内容(不是文件夹)
函数自身调用自身,称为递归。
递归要注意:
1.限定条件,不要陷入无限递归。
2.要注意递归的次数,尽量避免内存溢出。
3.递归中最好不要出现new对象。
练习1:练习:列出D盘下的所有文件的名称。文件夹中还有文件夹,
则继续在遍历,如果还是文件夹....,直到是文件
练习2:不用过滤器能列出指定的文件名吗,如.map3.
写的正规点。
思路:1.对指定的目录进行递归。
2.递归时列出文件的路径
3.将路径名称存到集合中(缓冲一个,存集合中既可以打印也可以写入文件中)
4.将集合中的数据写入文件中。由内存到硬盘中)专业:数据的持久化
练习3;
删除一个带内容的目录。
删除原理:在windows中,删除目录从里往外删,java删除不走回收站。
在删除完文件后,记得将整个文件夹删除.
练习4:如何将该流中的数据读取到集合中,并进行操作,在存储到文件中。
思路:
1.用一个流与info.txt文件关联
2. load加载进property中。
3. 使用store或list保存
练习5:用于记录应用程序运行次数。
如果达到使用次数,那么给出注册提示。
思考:很容易想到计数器,但是程序退出,计数器变
在内存中消失了。下一次启动时,又从0开始计数。
我们的需求:下次程序启动时会先加载计数器并加1后,在存储。
所以建立一个配置文件(以键值对形式存在),用于记录该软件的使用系数。
键值对数据是map集合。数据是以文件形式存储,使用io技术。
map + io --> properties
建立配置文件
操作配置文件
保存配置文件
Properties:是Hashtable的子类。是IO与集合的结合容器,里面的键值对都是字符串形式。
用处:用于键值对形式的配置文件。
方法:
getPropertied(key)
list(PrintStream):属性列表输出到流中
与保存相似
load(InputStream):从流中读取属性,流可以关联文件
setPropertity(key,value)
store(OutputStream,String
comments);将属性列表写到OutputStream流中。comments:自定义评论
Set<String>
stringPropertyNames()
list:输出到流中(相当于配置文件)写入流
load:配置文件(流)加载进集合(即从配置文件中读取)
读取流
打印流:PrintWrite与PrintStream :可以直接操作输入流和文件
PrintStream
:除了输出流的基本功能外,还可以将各种数据类型的数据都原样的打印。1.0
解释:PrintStream本身是OutputStream的一个子类,不仅具备write等功能,
还可以直接打印基本数据类型和对象。println(String x)
造函数可以接受的类型:
1.file对象。File
2.字符串路径。String
3.字节输出流。outputStream(包括System.out)
的PrintStream(File file)
可以直接操作文件,能操作文件的流都很重要
创建具有指定文件且不带自动行刷新的新打印流。
printWriter:具备printStream的功能,并且还增强了。1.1
Writer的子类。
造函数可以接受的类型:
1.file对象。File
2.字符串路径。String
3.字节输出流。OutputStream(包括System.out)
4.字符输出流。Writer
合并流SequenceInputStream:InputStream的子类。
将其他输入流串联起来,一个流读完,在读下一个.....。
构造函数:接收类型:文件,字符串路径名,outputStream,Writer
应用:多个流存到一个目的中,需要多次与目的文件进行关联。麻烦。可以将多个流整合成一个流。
方法:read,read(byte[] off,len)
*
构造函数:
1.SequenceInputStream(Enumeration<?extends InputStream> e);
2.SequenceInputStream(InputStream
s1,InputStream s2);只能传入2个流。
接口:Enumertation:枚举,相当于Vector的迭代器。方法:hasMoreElements(),nextElement()
*
Enumeration<E>
elements() 返回此向量的组件的枚举。
注:enum是抽象类,两者不同
切割文件。一个读取流对应多个输出流。类似分卷压缩。
原理:指定分切割的大小,用一个数组容器。