4.5 文件处理
I/O处理中,最常见的是对文件的操作,java.io包中有关文件处理的类有:File、FileInputStream、FileOutputStream、RamdomAccessFile和FileDescriptor;接口有:FilenameFilter。
4.5.1 文件描述
类File提供了一种与机器无关的方式来描述一个文件对象的属性。下面我们介绍类File中提供的各种方法。
文件或目录的生成
public File(String path);/*如果path是实际存在的路径,则该File对象 /*表示的是目录;如果path是文件名,则该File对象表示的是文件。*/ public File(String path,String name);//path是路径名,name是文件名 public File(File dir,String name);//dir是路径名,name是文件名来源:www.examda.com
文件名的处理
String getName( ); //得到一个文件的名称(不包括路径) String getPath( ); //得到一个文件的路径名 String getAbsolutePath( );//得到一个文件的绝对路径名 String getParent( ); //得到一个文件的上一级目录名 String renameTo(File newName); //将当前文件名更名为给定文件的 完整路径
文件属性测试
boolean exists( ); //测试当前File对象所指示的文件是否存在 boolean canWrite( );//测试当前文件是否可写 boolean canRead( );//测试当前文件是否可读 boolean isFile( ); //测试当前文件是否是文件(不是目录) boolean isDirectory( ); //测试当前文件是否是目录
普通文件信息和工具
long lastModified( );//得到文件最近一次修改的时间 long length( ); //得到文件的长度,以字节为单位 boolean delete( ); //删除当前文件
目录操作
boolean mkdir( ); //根据当前对象生成一个由该对象指定的路径 String list( ); //列出当前目录下的文件
【例4-3】 import java.io.*; //引入java.io包中所有的类 public class FileFilterTest{ public static void main(String args[]){ File dir=new File("d://ex"); //用File 对象表示一个目录 Filter filter=new Filter("java"); //生成一个名为java的过滤器 System.out.println("list java files in directory "+dir); String files[]=dir.list(filter); //列出目录dir下,文件后缀名 为java的所有文件 for(int i=0;i File f=new File(dir,files[i]); //为目录dir 下的文件或目录 创建一个File 对象 if(f.isFile()) //如果该对象为后缀为java的文件, 则打印文件名 System.out.println("file "+f); else System.out.println("sub directory "+f ); //如果是目录 则打印目录名 } } } class Filter implements FilenameFilter{ String extent; Filter(String extent){ this.extent=extent; } public boolean accept(File dir,String name){ return name.endsWith("."+extent); //返回文件的后缀名 } }
4.5.2 文件的顺序处理
类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写。例如,下列的语句段是顺序读取文件名为text的文件里的内容,并显示在控制台上面,直到文件结束为止。
FileInputStream fis; try{ fis = new FileInputStream( "text" ); System.out.print( "content of text is : "); int b; while( (b=fis.read())!=-1 ) //顺序读取文件text里的内容并赋值 给整型变量b,直到文件结束为止。 { System.out.print( (char)b ); } }catch( FileNotFoundException e ){ System.out.println( e ); }catch( IOException e ){ System.out.println( e ); }
4.5.3 随机访问文件
对于InputStream 和OutputStream 来说,它们的实例都是顺序访问流,也就是说,只能对文件进行顺序地读/写。随机访问文件则允许对文件内容进行随机读/写。在java中,类RandomAccessFile 提供了随机访问文件的方法。类RandomAccessFile的声明为: public class RandomAccessFile extends Object implements DataInput, DataOutput
接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数。如:readBoolean( )、readInt( )、readLine( )、readFully( ) 等。
接口DataOutput 中定义的方法主要是向流中写入基本类型的数据、或者写入一定长度的字节数组。如:writeChar( )、writeDouble( )、write( ) 等。 下面详细介绍RandomAccessFile类中的方法。
构造方法: RandomAccessFile(String name,String mode); //name是文件名,mode //是打开方式,例如"r"表示只读,"rw"表示可读写," RandomAccessFile(File file,String mode); //file是文件对象
文件指针的操作 long getFilePointer( ); //用于得到当前的文件指针 void seek( long pos ); //用于移动文件指针到指定的位置 int skipBytes( int n ); //使文件指针向前移动指定的n个字节 |