一、File1.1、File概述
文件和目录路径名的抽象表示形式。
用户界面和操作系统使用与系统相关的路径名字符串来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名有两个组件:
一个可选的与系统有关的前缀字符串,比如盘符,"/"表示 UNIX 中的根目录,"\\\\"表示 Microsoft Windows UNC 路径名。零个或更多字符串名称的序列。 字段摘要static String
pathSeparator
与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char
pathSeparatorChar
与系统有关的路径分隔符。
static String
separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char
separatorChar
与系统有关的默认名称分隔符。
构造方法摘要File(File parent, String child)
根据
parent 抽象路径名和 child 路径名字符串创建一个新File实例。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新File实例。
File(String parent, String child)
根据
parent 路径名字符串和 child 路径名字符串创建一个新File实例。
File(URI uri)
通过将给定的file:URI 转换为一个抽象路径名来创建一个新的File实例。
方法摘要boolean
canExecute()
测试应用程序是否可以执行此抽象路径名表示的文件。
boolean
canRead()
测试应用程序是否可以读取此抽象路径名表示的文件。
boolean
canWrite()
测试应用程序是否可以修改此抽象路径名表示的文件。
int
compareTo(File pathname)
按字母顺序比较两个抽象路径名。
boolean
createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
static File
createTempFile(StringPRefix, String suffix)
在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
static File
createTempFile(String prefix, String suffix, File directory)
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
boolean
delete()
删除此抽象路径名表示的文件或目录。
void
deleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
boolean
equals(Object obj)
测试此抽象路径名与给定对象是否相等。
boolean
exists()
测试此抽象路径名表示的文件或目录是否存在。
File
getAbsoluteFile()
返回此抽象路径名的绝对路径名形式。
String
getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
File
getCanonicalFile()
返回此抽象路径名的规范形式。
String
getCanonicalPath()
返回此抽象路径名的规范路径名字符串。
long
getFreeSpace()
返回此抽象路径名指定的分区中未分配的字节数。
String
getName()
返回由此抽象路径名表示的文件或目录的名称。
String
getParent()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
File
getParentFile()
返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回null。
String
getPath()
将此抽象路径名转换为一个路径名字符串。
long
getTotalSpace()
返回此抽象路径名指定的分区大小。
long
getUsableSpace()
返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
int
hashCode()
计算此抽象路径名的哈希码。
boolean
isAbsolute()
测试此抽象路径名是否为绝对路径名。
boolean
isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
boolean
isFile()
测试此抽象路径名表示的文件是否是一个标准文件。
boolean
isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件。
long
lastModified()
返回此抽象路径名表示的文件最后一次被修改的时间。
long
length()
返回由此抽象路径名表示的文件的长度。
String[]
list()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[]
list(FilenameFilter filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[]
listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File[]
listFiles(FileFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[]
listFiles(FilenameFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[]
listRoots()
列出可用的文件系统根。
boolean
mkdir()
创建此抽象路径名指定的目录。
boolean
mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
boolean
renameTo(File dest)
重新命名此抽象路径名表示的文件。
boolean
setExecutable(boolean executable)
设置此抽象路径名所有者执行权限的一个便捷方法。
boolean
setExecutable(boolean executable,
boolean ownerOnly)
设置此抽象路径名的所有者或所有用户的执行权限。
boolean
setLastModified(long time)
设置此抽象路径名指定的文件或目录的最后一次修改时间。
boolean
setReadable(boolean readable)
设置此抽象路径名所有者读权限的一个便捷方法。
boolean
setReadable(boolean readable,
boolean ownerOnly)
设置此抽象路径名的所有者或所有用户的读权限。
boolean
setReadOnly()
标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
boolean
setWritable(boolean writable)
设置此抽象路径名所有者写权限的一个便捷方法。
boolean
setWritable(boolean writable,
boolean ownerOnly)
设置此抽象路径名的所有者或所有用户的写权限。
String
toString()
返回此抽象路径名的路径名字符串。
URI
toURI()
构造一个表示此抽象路径名的file:URI。
URL
toURL()
已过时。此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过toURI方法将其转换为
URI,然后通过URI.toURL方法将 URI 装换为 URL。
1.2、File创建与删除
importjava.io.*;classFileDemo1
{publicstaticvoidmain(String[] args)
{
method1();
}publicstaticvoidmethod1()
{//创建File对象File f1=newFile("a.txt");//第二种File f2=newFile("d:\\abc","b.txt");//第三种File dir=newFile("d:\\bcd");
File f3=newFile(dir,"c.txt");//使用分隔符File f4=newFile("d:"+File.separator+"abc"+File.separator+"d.txt");//输出System.out.println("f1="+f1);//a.txtSystem.out.println("f2="+f2);//d:\abc\b.txtSystem.out.println("f3="+f3);//d:\bcd\c.txtSystem.out.println("f4="+f4);//d:\abc\d.txt}
}
创建文件
//创建文件,在指定位置创建文件,如果该文件已经存在,则不创建,返回 falsepublicstaticvoidmethod1()throwsIOException
{
File f=newFile("d:\\file.txt");//创建sop("create: "+f.createNewFile());//删除,删除失败返回false//sop("delete:"+f.delete());//在退出时删除指定文件f.deleteOnExit();
}
1.3、File判断 File获取
packagecom.pb.day20.io.file;importjava.io.File;importjava.io.IOException;publicclassFileDemo2 {publicstaticvoidmain(String[] args)throwsIOException {
File f1=newFile("d:\\a.txt");
File f2=newFile("e:\\c.txt");
File dir1=newFile("d:\\dbc");
File dir2=newFile("d:\\dbc\\dd\\aa\\d\\f\\dsf\\fsd");//判断文件是否存在,不存在就创建if(!f1.exists()){
f1.createNewFile();
}//判断文件夹是否存在if(!dir1.exists()){
dir1.mkdir();//创建一层文件夹}//创建多层文件夹if(!dir2.exists()){
dir2.mkdirs();
}//判断sop("f1是文件吗?"+f1.isFile());
sop("dir1是文件夹吗?"+dir1.isDirectory());
sop("f1是可执行文件吗?"+f1.canExecute());
sop("f1可读吗?"+f1.canRead());
sop("f1可写吗?"+f1.canWrite());
sop("f1是隐藏文件吗?"+f1.isHidden());//获取文件信息sop(f1.getName());//文件名sop(f1.getPath());//相对路径sop(f1.getAbsolutePath());//获取绝对路径,返回值是字符串sop(f1.getAbsoluteFile());//获取绝对路径,返回值是File类对象sop(f1.lastModified());//最后修改时间 长整型sop(f1.length());//文件字节大小,长整型//重命名sop(f1.renameTo(f2));//剪切的作用}publicstaticvoidsop(Object obj){
System.out.println(obj);
}
}
1.4、File文件列表
packagecom.pb.day20.io.file;importjava.io.File;importjava.io.FilenameFilter;publicclassFileDemo3 {publicstaticvoidmain(String[] args) {
method3();
}//列出当前目录下的指定文件publicstaticvoidmethod3(){
File f=newFile("d:\\");
File [] files=f.listFiles(newFilenameFilter() {
@Overridepublicbooleanaccept(File dir, String name) {//返回txt文件returnname.endsWith(".txt");
}
});for(File ff:files){
System.out.println(ff.getName()+"..."+ff.length());
}
}//列表当前目录下的所有文件包含文件夹名字publicstaticvoidmethod2(){
File f=newFile("c:\\");
String [] names=f.list();//必须是目录,否则就是空指针异常for(String s:names){
System.out.println(s);
}
}//列出当前系统的所有盘符publicstaticvoidmethod1(){
File [] files=File.listRoots();for(File f:files){
System.out.println(f);
}
}
}
1.6、File列出所有递归
packagecom.pb.day20.io.file;/*** 递归调用,
* 列表指定目录下的,所有文件包括子目录中的文件*/importjava.io.File;publicclassFileDemo4 {publicstaticvoidmain(String[] args) {
File dir=newFile("d:\\");
getFiles(dir);
}//递归publicstaticvoidgetFiles(File dir){
System.out.println(dir);//获取文件数组,列表File[] files=dir.listFiles();//遍历for(File file:files){//判断是不是文件夹if(file.isDirectory()){//是文件夹就再次调用getFiles(file);
}else{//不是就列表System.out.println(file);
}
}
}
}
递归:
限定条件
注意递归的次数,尽量避免内存溢出
1.7、File删除带文件的目录
packagecom.pb.day20.io.file;importjava.io.File;publicclassFileDemo5 {publicstaticvoidmain(String[] args) {
File dir=newFile("d:\\kk");
removeDir(dir);
}//删除,带有文件的多层文件夹publicstaticvoidremoveDir(File dir){
File [] files=dir.listFiles();for(intx=0;x<files.length;x++){if(files[x].isDirectory()){
removeDir(files[x]);
}else{//删除文件System.out.println(files[x]+"----file----"+files[x].delete());
}
}//删除空文件夹System.out.println(dir+"----dir----"+dir.delete());
}
}
1.8、将一个文件夹的的所有文件,包含子目录都复制要另一个目录下
/*将一个文件夹的的所有文件,包含子目录都复制要另一个目录下*/importjava.io.*;classIOCopy
{publicstaticvoidmain(String[] args)
{//源文件File src=newFile("D:\\music");//目的文件File des=newFile("e:\\test");
copyDir(src,des);
System.out.println("复制完成!");
}/*递归复制*/publicstaticvoidcopyDir(File src,File des)
{//获取列表File[] files=src.listFiles();//判断目标文件是否存在if(!des.exists()){//创建目录des.mkdir();
}//遍历for(File f:files)
{//判断是不是目录if(f.isDirectory())
{//获取路径,拼接文件名,再次调用自己copyDir(newFile(f.getPath()),newFile(des+"\\"+f.getName()));//是不是文件}elseif(f.isFile())
{//复制copyFile(newFile(f.getPath()),newFile(des+"\\"+f.getName()));
}
}
}//使用IO流复制文件publicstaticvoidcopyFile(File src,File des)
{
BufferedInputStream bis=null;
BufferedOutputStream bos=null;try{
bis=newBufferedInputStream(newFileInputStream(src));
bos=newBufferedOutputStream(newFileOutputStream(des));//声明缓冲区intlen=0;while((len=bis.read())!=-1)
{
bos.write(len);
}
}catch(IOException e)
{
e.printStackTrace();
}finally{try{if(bos!=null)
bos.close();
}catch(IOException e)
{
e.printStackTrace();
}try{if(bis!=null)
bis.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
}
二、Properties2.1、Properties概述
构造方法摘要Properties()
创建一个无默认值的空属性列表。
Properties(Properties defaults)
创建一个带有指定默认值的空属性列表。
方法摘要String
getProperty(String key)
用指定的键在此属性列表中搜索属性。
String
getProperty(String key, String defaultValue)
用指定的键在属性列表中搜索属性。
void
list(PrintStream out)
将属性列表输出到指定的输出流。
void
list(PrintWriter out)
将属性列表输出到指定的输出流。
void
load(InputStream inStream)
从输入流中读取属性列表(键和元素对)。
void
load(Reader reader)
按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
void
loadFromxml(InputStream in)
将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。
Enumeration<?>
propertyNames()
返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。
void
save(OutputStream out,
String comments)
已过时。如果在保存属性列表时发生 I/O 错误,则此方法不抛出
IOException。保存属性列表的首选方法是通过store(OutputStream out, String comments)方法或storeToXML(OutputStream os, String comment)方法来进行。
Object
setProperty(String key, String value)
调用Hashtable的方法put。
void
store(OutputStream out,
String comments)
以适合使用load(InputStream)方法加载到Properties表中的格式,将此Properties表中的属性列表(键和元素对)写入输出流。
void
store(Writer writer, String comments)
以适合使用load(Reader)方法的格式,将此Properties表中的属性列表(键和元素对)写入输出字符。
void
storeToXML(OutputStream os,
String comment)
发出一个表示此表中包含的所有属性的 XML 文档。
void
storeToXML(OutputStream os,
String comment,
String encoding)
使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。
Set<String>
stringPropertyNames()
返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。
Properties类表示了一个持久的属性集。Properties可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
2.2、存取功能
publicstaticvoidsetAndGet(){//声明Properties prop=newProperties();//设置prop.setProperty("username", "root");
prop.setProperty("passWord","root");//获取用户名对应的值System.out.println(prop.getProperty("username"));//修改密码prop.setProperty("password","root123");//获取全部keySet<String> keys=prop.stringPropertyNames();//遍历for(String s:keys){
System.out.println(s+": "+prop.getProperty(s));
}
}
2.3、存取配置文件
publicstaticvoidmethod2()throwsIOException {//声明Properties集合Properties prop =newProperties();
FileInputStream fis=newFileInputStream("D:/info.txt");
FileOutputStream fos=newFileOutputStream("D:\\info.txt");//加载数组到集合prop.load(fis);
System.out.println(prop);
prop.list(System.out);//修改prop.setProperty("sex", "woman");
prop.store(fos,"sex is woman");
System.out.println(prop);
fos.close();
fis.close();
}publicstaticvoidmethod1()throwsIOException {//文件流BufferedReader br =newBufferedReader(newFileReader("D:\\info.txt"));//声明Properties集合Properties prop =newProperties();
String line=null;//遍历while((line = br.readLine()) !=null) {//System.out.println(line);String[] arr = line.split("=");//System.out.println(arr[0]+"..."+arr[1]);prop.setProperty(arr[0], arr[1]);
}
System.out.println(prop);
br.close();
}
示例
publicstaticvoidmethod()throwsIOException{
File file=newFile("a.txt");//判断文件是否存在if(!file.exists()){
file.createNewFile();
}
FileInputStream fis=newFileInputStream(file);//声明集合Properties prop=newProperties();
prop.load(fis);intcount=0;
String value=prop.getProperty("times");if(value!=null){
count=Integer.parseInt(value);//判断次数if(count>=5){
System.out.println("使用次数已经用完,请续费!");return;
}
}//次数+1count++;//把KEY和VALUE放回去prop.setProperty("times", count+"");
FileOutputStream fos=newFileOutputStream(file);
prop.store(fos,"次数+1");
fos.close();
fis.close();
}
三、PrintWriter与序列流3.1、PrintWriter与PrintStream
packagecom.pb.io.properties.demo1;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;/*** 从键盘接收数据,并输出在控制台
* 使用PrintWriter
**/publicclassPrintWriterDemo {publicstaticvoidmain(String[] args)throwsIOException {//从键盘接收数据,并输出在控制台BufferedReader br=newBufferedReader(newInputStreamReader(System.in));//使用打印流输出,并自动刷新PrintWriter pw=newPrintWriter(newBufferedWriter(newOutputStreamWriter(System.out)),true);
String line=null;
System.out.println("请输入内容,以over结束!");while((line=br.readLine())!=null){if("over".equals(line)){
break;
}
pw.println(line);
}
pw.close();
br.close();
}
}
3.2、序列流--SequenceInputStream
SequenceInputStream表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
构造方法摘要SequenceInputStream(Enumeration<? extends InputStream> e)
通过记住参数来初始化新创建的SequenceInputStream,该参数必须是生成运行时类型为InputStream对象的Enumeration型参数。
SequenceInputStream(InputStream s1, InputStream s2)
通过记住这两个参数来初始化新创建的SequenceInputStream(将按顺序读取这两个参数,先读取s1,然后读取s2),以提供从此SequenceInputStream读取的字节。
方法摘要int
available()
返回不受阻塞地从当前底层输入流读取(或跳过)的字节数的估计值,方法是通过下一次调用当前底层输入流的方法。
void
close()
关闭此输入流并释放与此流关联的所有系统资源。
int
read()
从此输入流中读取下一个数据字节。
int
read(byte[] b,
int off, int len)
将最多len个数据字节从此输入流读入 byte
数组。
四、合并流4.1、合并流
packagecom.pb.io.properties.demo1;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.SequenceInputStream;importjava.util.Enumeration;importjava.util.Vector;publicclassSequenceDemo {publicstaticvoidmain(String[] args)throwsIOException {
Vector<FileInputStream> v=newVector<FileInputStream>();
v.add(newFileInputStream("d:\\1.txt"));
v.add(newFileInputStream("d:\\2.txt"));
v.add(newFileInputStream("d:\\3.txt"));//转换为枚举Enumeration<FileInputStream> en=v.elements();//合并流SequenceInputStream sis=newSequenceInputStream(en);//目标文件FileOutputStream fos=newFileOutputStream("d:\\4.txt");//声明缓冲区byte[] buf=newbyte[1024];intlen=0;while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
}
五、分割流5.1、分割流
packagecom.pb.io.properties.demo1;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.SequenceInputStream;importjava.util.ArrayList;importjava.util.Enumeration;importjava.util.Iterator;/*** 将文件切割
* 再合并
**/publicclassSplitDemo {publicstaticvoidmain(String[] args)throwsIOException {//split();merge();
}//合并publicstaticvoidmerge()throwsIOException{
File src=newFile("D:\\split");
File [] files=src.listFiles();
ArrayList<FileInputStream> list=newArrayList<FileInputStream>();for(File f:files){
list.add(newFileInputStream(f));
}
Iterator<FileInputStream> it=list.iterator();//创建枚举Enumeration<FileInputStream> en=newEnumeration<FileInputStream>() {
@OverridepublicFileInputStream nextElement() {returnit.next();
}
@OverridepublicbooleanhasMoreElements() {returnit.hasNext();
}
};//创建合并流SequenceInputStream sis=newSequenceInputStream(en);
FileOutputStream fos=newFileOutputStream("D:\\split\\t.mp3");byte[] buf=newbyte[1024];intlen=0;while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();
}//切割publicstaticvoidsplit()throwsIOException{//源文件File file=newFile("D:\\gm.mp3");
FileInputStream fis=newFileInputStream(file);//目标FileOutputStream fos=null;//缓冲区byte[] buf=newbyte[1024*1024];intlen=0;intcount=1;while((len=fis.read(buf))!=-1){
fos=newFileOutputStream("D:\\split\\"+(count++)+".part");
fos.write(buf,0,len);
}
fos.close();
fis.close();
}
}