java.ioFile类Java.io.File类主要是完成了文件夹管理的命名、查询文件属性和处理目录等不进行文件夹内容的读取操作。构造方法:File(StringdirectoryPath)File(StringdirectoryPath,Stringfilename)File(FiledirObj,Stringfilename)File(URIuriObj)directoryPath是问价的路径名,filename是文件名,dirObj是一个指定目录的File对象,uriObj是描述一个文件的URI对象。Filef1=newFile(“/”);Filef2=newFile(“/”,”xx.text”);Filef3=newFile(f1,”xx.text”)f2和f3指向相同的文件。下面代码测试了File的几个方法:staticvoidp(Strings){System.out.println(s);}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubFilef1=newFile(/axis2.xml);p(文件名+f1.getName());p(相对路径+f1.getPath());p(绝对路径+f1.getAbsolutePath());p(父节点+f1.getParent());p(是否存在+f1.exists());p(是否可写+f1.canWrite());p(是否可读+f1.canRead());p(isDirectory:+f1.isDirectory());p(是否正常文件+f1.isFile());p(isabsolute?:+f1.isAbsolute());p(最后修改时间:+f1.lastModified());p(文件大小:+f1.length());}输出如下:注意:以上代码在新建文件对象的时候,Filef1=newFile(/axis2.xml);路径中有个“/”,这表示axis2.xml的绝对路径是在对应的磁盘根目录下,如果去掉/,则通常是Java虚拟机的调用目录下。下面列出File类常用方法,以供查看:方法名功能CanWrite()返回文件是否可写。CanRead()返回文件是否可读。CompareTo(Filepathname)检查指定文件路径间的顺序Delet()从文件系统内删除该文件。DeleteOnExit()程序顺利结束时从系统中删除文件。Equals(Objectobj)检查特定对象的路径名是否相等。Exists()判断文件夹是否存在。GetAbsoluteFile()返回文件的完整路径。GetAbsolutePath()返回文件的完整路径。GetName()返回文件名称。GetParent()返回文件父目录路径。GetPath()返回文件的潜在相对路径。GetParentFile()返回文件所在文件夹的路径。HashCode()返回文件哈希码。IsDirectory()判断该路径指示的是否是文件。IsFile()判断该路径指示的是否是文件。LastModified()返回文件的最后修改时间标志。Length()返回文件长度。List()返回文件和目录清单。Mkdir()生成指定的目录。RenameTo(Filedest)更名文件。SetReadOnly()将文件设置为可读。ToURL()将文件的路径字符串转换成URLFile.GetCreationTime读取创建时间File.SetCreationTime设置创建时间File.GetLastAccessTime读取最后访问时间File.SetLastAccessTime设置最后访问时间File.GetLastWriteTime读取最后修改时间File.SetLastWriteTime设置最后修改时间File.GetAttributes读取文件属性File.SetAttributes设置文件属性目录的调用,看以下代码:publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubFilef1=newFile(/JavaWork-e3.3-j1.5-t5.5);if(f1.isDirectory()){System.out.println(目录名+JavaWork-e3.3-j1.5-t5.5);String[]s=f1.list();for(inti=0;is.length;i++){Filef=newFile(/JavaWork-e3.3-j1.5-t5.5+/+s[i]);if(f.isDirectory()){System.out.println(s[i]+是一个目录);}elseSystem.out.println(s[i]+是一个文件);}}elseSystem.out.println(JavaWork-e3.3-j1.5-t5.5不是一个目录!);}输出如图示:File.list()用之前要先判断File对象是否是目录,此方法以String数组形式返回目录下所有对象的名字.此方法第二种形式String[]File.list(FilenameFilterFFObj)用于限制list返回的文件类型。FilenameFilter为一个接口,里面只定义了accept()方法,它被列表中的每个文件各调用一次。booleanaccept(Filedirectory,Stringfilename)listFiles()方法File[]listFiles()File[]listFiles(FilenameFilterFFObj)File[]listFiles(FileFilterFObj)其次,还有创建目录的方法mkdir()和mkdirs(),两者区别就是:mkdir()要创建的目录,那么其路径上的文件夹必须存在,mkdirs()创建的目录则不需要。如:在d盘上创建目录a/b,用mkdir()则a文件夹必须事先存在,用mkdirs()则不需要,如果a不存在,它会自动创建a。流在上面的说明中,文件已经创建好了,但是文件的内容还没有。通过java.io流,对文件内容进行操作。字节流和字符流对比字节流是最基本的,所有的InputStream和OutputStream的子类都是字节流,其主要用于处理二进制数据,并按字节来处理。实际开发中很多的数据是文本,这就提出了字符流的概念-Reader和Writer。它按虚拟机的encode来处理,也就是要进行字符流的转化。这两者之间通过InputStreamReader和OutputStreamWriter来关联。实际上通过byte[]和String来关联在实际开发中出现的汉字问题,这都是在字符流和字节流之间转化不统一造成的。字节流转化为字符流,实际上就是byte[]转化为String。字符流转化为字节流,实际上就是String转化为byte[]。至于java.io中还出现了许多其他的流,主要是为了提高性能和使用方便,如BufferedInputStream、PipedInputStream等。字节流所有的读操作都继承自一个公共超类java.io.InputStream类。所有的写操作都继承自一个公共超类java.io.OutputStream类。InputStream和OutputStream都是抽象类。InputStream有6个低级输入流:低级流流的用途ByteArrayInputStream从内存数组中读取数据字节FileInputStream从本地文件系统中读取数据字节PipedInputStream从线程管道中读取数据字节StringBufferInputStream从字符串中读取数据字节SequenceInputStream从两个或多个低级流中读取数据字节,当到达流的末尾时从一个流转到另一个流System.in从用户控制台读取数据字节InputStream还有一个子类:过滤器流java.io.FilterInputStream。过滤器流即能把基本流包裹起来,提供更多方便的用法。FilterInputStream类的构造方法为FilterInputStream(InputStream),在指定的输入流之上,创建一个输入流过滤器。FilterInputStream的常用的子类如下:过滤器输入流流的用途BufferedInputStream缓冲区对数据的访问,以提高效率DataInputStream从输入流中读取基本数据类型,如int、float、double或者甚至一行文本LineNumberInputStream在翻译行结束符的基础上,维护一个计数器,该计数器表明正在读取的是哪一行。PushbackInputStream允许把数据字节向后推到流的首部FileInputStream举例:publicclassIOTest{publicstaticfinalStringfileDir=d:/axis2.xml;//原始文件位置publicstaticfinalStringtoDir=d:/456.txt;//文件将要拷贝到地址FileInputStreamin=null;FileOutputStreamout=null;/***文件拷贝,从地址src/123.txt拷贝到d:/123.txt**@throwsException*/publicvoidcopyFile()throwsException{in=newFileInputStream(fileDir);out=newFileOutputStream(toDir,true);byte[]bt=newbyte[1024];inthasRead=0;while((hasRead=in.read(bt,0,bt.length))!=-1){out.write(bt,0,hasRead);}out.flush();out.close();in.close();}/***测试**@paramargs*@throwsException*/publicstaticvoidmain(String[]args)throwsException{IOTesttest=newIOTest();test.copyFile();}}对于read()这个方法,每次读取一定字节后,下一次读取,将会自动从上次结束的位置开始。一般在InputStream的具体实现类中,都有一个字段标识当前的位置,即已经读到了什么地方。比如在BufferedInputStream中,有一个pos属性,用来指示这个位置。上面的代码中,flush解释:flush方法即使在缓冲区中没有满的情况下,也会将缓冲区内的内容强制写到外设,也就是所谓的刷新。flush方法不是对所有的OutputStream子类起作用,只对那些使用缓冲区的OutputStream子类有效。调用close方法,系统在关闭这个流前,也会将缓冲区的内容写到外设上。字符流当用于处理文本数据时,选择字符流比字节流更好。所有的读操作都继承自一个公共超类java.io.Reader类。所有的写操作都继承自一个公共超类java.io.Writer类。同样Reader和Writer也是抽象类。Reader的常用的子类如下:低级读取器流的用途CharArrayReader从字符数组中读取数据InputStreamReader将字节流转化为字符流FileReader(InputStreamReader的子类)从本地文件系统中读取字符序列StringReader从字符串中读取字符序列PipedReader从线程管道中读取字符序列同样的,字符流也有过滤器,提供简便的方法。常用的过滤器读取器:过滤器读取器流的用途BufferedReader缓冲数据的访问,以提高效率LineNumberReader(BufferedReader的子类)维护一个计数器,该计数器表明正在读取的是哪一行。