JavaIO文件File

前言

File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。

1、构造器

不管用哪种方式创建file对象,只要内部字符串能拼接成一个完整的路径名,那么就能成功创建file对象

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 实例。 
2、文件的创建

这3种方法不能建立目录 ,也就是说路径不对时会创建失败

public boolean createNewFile() throws IOException 

如果指定的文件不存在并成功地创建,则返回 true;

如果指定的文件已经存在,则返回 false,或者有目录名和要创建的文件相同,也返回false

//参数:prefix - 用于生成文件名的前缀字符串;必须至少是三字符长
//suffix - 用于生成文件名的后缀字符串;可以为 null,
//directory - 将创建的文件所在的目录;如果使用默认临时文件目录,则该参数为 null返回:表示新建空文件的抽象路径名
public static File createTempFile(String prefix,String suffix, File directory)throws IOException 
//调用此方法等同于调用 createTempFile(prefix, suffix, null)。
public static File createTempFile(String prefix, String suffix) throws IOException 

如果此方法成功返回,则可以保证:由返回的抽象路径名表示的文件在此方法被调用之前不存在。

prefix必须至少是三字符长

参数源码如下:

if(prefix.length()<3)throw new IllegalArgumentException("Prefix string too short");
	
if(suffix==null) suffix=".tmp";
3、路径的创建

如果 创建目录下有文件和要创建的路径名一样 则创建失败

创建成功,返回 true;否则返回 false(已经存在返回false)

public boolean mkdir() 

public boolean mkdirs() 

它们的区别 ?

mkdirs()可以建立多级文件夹, mkdir()只会建立一级的文件夹,

new File("/tmp/one/two/three").mkdirs();执行后,如果目录都不存在,会建立tmp/one/two/three四级目录

new File("/tmp/one/two/three").mkdir();

如果前3个目录存在则会建立three 目录 否则不会建立任何目录,因为找不到/tmp/one/two目录, 结果返回false

4、删除

删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。当且仅当成功删除文件或目录时,返回 true;否则返回 false

public boolean delete() 

public void deleteOnExit() 

它们的区别 ?

当调用delete()方法时,直接删除文件,不管该文件是否存在,一经调用立即执行;

当调用deleteOnExit()方法时,只是相当于对deleteOnExit作一个声明,当程序运行结束,JVM终正调用deleteOnExit()方法实现删除操作。即该方法是将删除的命令缓存了一下,到服务停止的时候再进行操作delete()的缺点是要删除的目录不为空, delete不能删除,用下面的方法可以弥补

public  static  void  deleteAll(File file){  
	    if(file.isFile()||file.list().length==0){      
	      file.delete();  
	   }else{        
	        File[]files=file.listFiles();         
	        for(Filef:files){            
	        deleteAll(f);            
	        f.delete();    
	 }}}
5、文件属性判断
boolean canExecute()是否可以执行此抽象路径名表示的文件。 
	
boolean canRead()是否可以读取此抽象路径名表示的文件。
	 
boolean canWrite()是否可以修改此抽象路径名表示的文件。
	 
boolean isAbsolute() 是否为绝对路径名。 
	
boolean isHidden()是否是一个隐藏文件。 
	
boolean exists()文件或目录是否存在。
	
boolean  isFile() 否是一个标准文件(不是目录)。
	
boolean isDirectory() 是否是一个目录

问题1 绝对路径 ,相对路径 , 抽象路径 的区别?

绝对路径

绝对路径就是文件在系统中的客观位置,举例说明我的“D:\QQ\Bin”目录下有一个“AFCtrl.dll”的文件,所以“D:\QQ\Bin\AFCtrl.dll”就是“AFCtrl.dll”文件的绝对路径。

相对路径

相对路径就是指文件的位置相对于你所在系统目录的位置,举例说明我现在处在“D:\QQ”目录下,我要找的文件绝对路径为“D:\QQ\Bin\AFCtrl.dll”,那么他的相对路径就是“Bin\AFCtrl.dll”。

抽象路径

用户界面和操作系统使用与系统相关的路径名字符串来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名有两个组件:一个可选的与系统有关的前缀字符串,比如盘符,"/" 表示 UNIX 中的根目录,"\\" 表示 Microsoft Windows UNC 路径名,以及零个或更多字符串名称的序列。除了最后一个,抽象路径名中的每个名称代表一个目录;最后一个名称既可以代表目录,也可以代表文件。空的抽象路径名没有前缀和名称序列。

5、File重命名

重命名

public boolean renameTo(File dest)参数: dest - 指定文件的新抽象路径名 返回:当且仅当重命名成功时,返回 true;否则返回 false 

重新命名此抽象路径名表示的文件(包括路径)。

此方法行为的许多方面都是与平台有关的:

重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,该操作不是不可分的,

如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功。应该始终检查返回值,以确保重命名操作成功。

6、文件设置
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)设置此抽象路径名的所有者或所有用户的写权限 

URI  toURI() 构造一个表示此抽象路径名的 file: URI。 
7、遍历file
String[] list() 

如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个字符串数组, 每个数组元素对应目录中的每个文件

或目录。表示目录本身及其父目录的名称不包括在结果中。每个字符串是一个文件名,而不是一条完整路径。

案例

File f = new File("E:/JAVA");必须是目录,注意只会遍历子目录
	
String[] str = f.list(); 
	
for(String s:str){  
	
System.out.println(s);
	
}
//jdk1.8.0_144
//jre1.8.0_144 
File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录名。 

File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 

String[] list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 

File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 

static File[] listRoots() 列出可用的文件系统根。 
8、分隔符

系统路径分隔符用来分割不同路径

static String  pathSeparator//与系统相关的路径分隔符,为方便起见,表示为字符串。

static char  pathSeparatorChar//与系统相关的路径分隔符。

pathSeparator 与pathSeparatorChar区别?

没有区别,其实pathSeparator 底层就是pathSeparatorChar,源码如下:

public static final char pathSeparatorChar = fs.getPathSeparator();

public static final String pathSeparator = "" + pathSeparatorChar;

系统名称分隔符/用来分割同一路径中的不同名称

static String separator//系统相关的默认名称分隔符,为方便起见,表示为字符串。

static char separatorChar//系统相关的默认名称分隔符。

名称分隔符:
Windows下是“\”
unix|linux下是“/”
考虑到程序的可移植性,创建文件时建议大家选用"/",因为经过测试用java创建文件时在windows平台下用“/”也是可以的,java貌似在后台作过处理了。
还有一种用法:
用File.separator代替它们,这个永远不会出现可移植性问题。

9、FilenameFilter与FileFilter

接口FilenameFilter的学习

实现此接口的类实例可用于过滤器文件名。。

boolean accept(File dir, String name)

测试指定文件是否应该包含在某一文件列表中。
参数:dir - 被找到的文件所在的目录。
name - 文件的名称。
返回:当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。

案例

File file = new File("C:\\abc\\xyz\\hello");
String[] names = file.list(newFilenameFilter(){
public  boolean accept(Filedir,Stringname){
if(name.endsWith(".txt")){
  return true;
}
  return false;
};
});

接口FileFilter的学习

用于抽象路径名的过滤器。

boolean accept(File pathname)

测试指定抽象路径名是否应该包含在某个路径名列表中

参数:pathname - 要测试的抽象路径名

返回: 当且仅当应该包含 pathname 时返回 true

10、文件夹相关属性获取

修改的时间

long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间。

名称

String getName()返回文件或目录的名称。 
	
String getParent() 返回父文件或目录的名称。;如果此路径名没有指定父目录,则返回 null。 
	
File getParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 

字节长度

long length()文件的字节长度 

路径名

File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。 
	
String getAbsolutePath()返回此文件的绝对路径 
	
String getPath() 返回文件的相对路径 
	
File getCanonicalFile() 返回此文件的抽象路径。 
	
String getCanonicalPath()返回此文件的抽象路径。 
	
long getFreeSpace()返回此抽象路径名指定的分区中未分配的字节数。 
	
long getTotalSpace()返回此抽象路径名指定的分区大小。 
	
long getUsableSpace()返回此抽象路径名指定的分区上可用于此虚拟机的字节数 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值