IO系统_File类分析

     File类:文件和目录路径名的抽象表示形式,它的对象并不是一个硬盘上面的文件或者目录,他只是一个抽象路径名,可以与对应路径名的文件或者目录关联,对硬盘文件或者目录进行相关的操作。当硬盘上面还没有对应的文件或者文件夹实体时,这个File对象只能操作路径名字符串相关的东西,对应实体文件或者文件夹的属性的是无法获取的。不过可以通过File对象的CreatNewFile、mkdir等等方法在硬盘上面创建对应的实体,然后操作对应实体的属性,如内容、创建日期、可读写等等。

   总体来说,一个File对象由下面10个方面的字段、构造器和方法组成,里面的成员都是常用成员。对应硬盘上面的文件或者文件夹,我暂时称之为File实体(外存),而抽象路径名称之为File对象(内存)。


1:Filed(字段):
①static private FileSystem fs = FileSystem.getFileSystem();
 获取本地平台的文件系统,这个与对应的操作系统有关了,好像对File实体的操作,都需要用到这个对象
②private String path:
构造File对象时,将File对象的抽象路径名字符串赋给了path,对应的抽象路径名的操作,比如文件名、父目录等等都需要用path对象,就连File对象的toString方法,也是将path值返回给toString。


③名称分隔符:
public static final char separatorChar = fs.getSeparator();
public static final String separator = "" + separatorChar;
separatorChar在windows下是'\\',在UNIX上是'/',separator只是将对象的字符变成了字符串。例如:"D:\\a\\b.txt  和"/a/b.txt
④路径分隔符:
public static final char pathSeparatorChar = fs.getPathSeparator();
ublic static final String pathSeparator = "" + pathSeparatorChar;
Windows下面是';',即分号,UNIX上面是':',即冒号,这个和上面的名称分隔符可能容易混淆,举个例子就容易明白了。windows下面 D:\\a.txt;F:\\b.txt; 这两个抽象路径名之间用分号隔开




2、Constructors(构造器):
File的构造函数有还几个,共同点就是:首先从参数中获取一个路径名字符串,然后对字符串进行校验,看符不符合路径名要求,符合的话就将路径名赋值给path,这个path就是原始的字符串数据;如果构造参数的路径名是a.txt,那么path也等于a.txt。也就是说,构造器
只是将符合要求的字符串路径原封不动的赋给path。以后对路径名的操作,也是操作path了。比如a.txt路径,调用其getParent,获得的就是一个null了


3、Path-component accessors(path组件访问):
public String getName()
public String getParent()
public File getParentFile()
public String getPath()
以上4个方法,都是基本path字符串的操作,这个字符串是什么样的,得到的结果就是对应上面样的,例如path=a.txt,那么getName()=
a.txt  getParent=null;getParentFile=null;getPath=path


4、Path operations(path组件操作):将path值放到对应的操作系统上面进行处理。
①public boolean isAbsolute():依据对应的平台,看path的值是否是绝对路径,比如windows里面以盘符开头如D:,而UNIX以 /开头
②public String getAbsolutePath():如果path是绝对路径,直接放回,如果不是,还要根据对应的操作系统获得当前目录值,并加到前面去,将结果返回来
③public File getAbsoluteFile()这是在上面的操作基础上,将返回的绝对路径值包装成一个File对象
④public String getCanonicalPath():规范路径名字符串,它与此抽象路径名表示相同的文件或目录,例如:windows里面路径名标准中,盘符要大小,当我们写错小写的cdef时,会被转换成标准的写法
⑤public File getCanonicalFile():返回由标准形式包装成的File
⑥public URI toURI():构造一个表示此抽象路径名的 file: URI。 


5、Attribute accessors(属性访问器):这一部分的方法,主要是对File实体(硬盘文件/目录)的属性进行访问操作。共同点:当File实体不存在是,它们都返回false;
public boolean canRead() :是否可读,当File实体不存在或者File实体设置了不能读时,返回false
public boolean canWrite():是否可写
public boolean exists():File实体是否存在
public boolean isDirectory():判断是否是目录
public boolean isFile() :是否是标准文件
public boolean isHidden():是否是隐藏文件,很多隐藏文件无法进行很多其他的操作,需要之前确认一下它是否是隐藏文件,比如说删除。
public long lastModified():最近修改时间
public long length():返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。 


6File operations(File实体的操作):这一部分的方法比较多,
主要有①创建或删除文件和目录:
   ②返回目录的下层信息:下层目录和文件
  ③设置文件的属性:名称、读写性、执行性、时间等待
这些方法的共同点是,硬盘文件必须存在(除了创建删除文件),否则出现nullPointException异常。
public boolean createNewFile()
public boolean mkdir()
public boolean mkdirs()
public boolean delete()
public void deleteOnExit()


public String[] list()
public String[] list(FilenameFilter filter)
public File[] listFiles()
public File[] listFiles(FilenameFilter filter)
public File[] listFiles(FileFilter filter)


public boolean renameTo(File dest):类似于文件的移动
public boolean setLastModified
 public boolean setReadOnly()
public boolean setWritable(boolean writable, boolean ownerOnly)
 public boolean setWritable(boolean writable)
 public boolean setReadable(boolean readable, boolean ownerOnly)
 public boolean setReadable(boolean readable)
public boolean setExecutable(boolean executable, boolean ownerOnly)
public boolean setExecutable(boolean executable)
public boolean canExecute()


7、Filesystem interface:
public static File[] listRoots():列出可用的文件系统根,比如Windows返回所有的根目录就是盘符号了:C:\ D:\等等了


8、Disk usage:获取硬盘的使用情况,比如大小、空闲、可以的
public long getTotalSpace():此抽象路径名所在分区的总大小,单位字节
public long getFreeSpace():此抽象路径名所在分区的未分配空间大小,单位字节
 public long getUsableSpace():返回此抽象路径名指定的分区上可用于此虚拟机的字节数


9 、Temporary files:临时文件指的是程序运行阶段存在,程序退出时,就删除的文件


①public static File createTempFile(String prefix, String suffix, File directory):在指定目录创建一个临时文件
②public static File createTempFile(String prefix, String suffix):在当前目录创建一个临时文件


10、Basic infrastructure基础的设施
①public int compareTo(File pathname):File实现Comparable<File>接口的方法
②public boolean equals(Object obj):覆盖equals方法,对两个③File对象进行比较,看是否相等
④public int hashCode():
⑤ public String toString() {return getPath();}:直接返回了path的值


发布了31 篇原创文章 · 获赞 5 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章