转载【赵彦军的博客】 http://blog.csdn.net/zhaoyanjun6/article/details/54292148
File
类的构造函数有6个,6个构造函数,可以分为2类。4个公共构造函数,2个私有构造函数。
- public File(String pathname) //文件的绝对路径
- public File(URI uri) //文件的URI地址
- public File(String parent, String child) //指定父文件绝对路径、子文件绝对路径
- public File(File parent, String child) //指定父文件、子文件相对路径 //
下面这两个是File类中私有的构造函数,外面不能调用
- private File(String child, File parent) private File(String pathname, int prefixLength)
构造函数1:
1 //电脑d盘中的cat.png 图片的路径 2 String filePath1 = "D:/cat.png" ; 3 File file = new File( filePath1 ) ;
构造函数2:
1 String parentFilePath = "E:/cat" ; 2 3 String childFilePath = "small_cat.txt" ; 4 5 //创建parentFile文件 6 File parentFile = new File( parentFilePath ) ; 7 parentFile.mkdir() ; 8 9 //如果parentFile不存在,就会报异常 10 File file = new File( parentFilePath , childFilePath ) ; 11 12 try { 13 file.createNewFile() ; 14 } catch (IOException e) { 15 e.printStackTrace(); 16 }
效果图:
构造函数3:
1 String parentFilePath = "E:/cat" ; 2 3 //构造父文件 4 File parent = new File( parentFilePath ) ; 5 parent.mkdir(); 6 7 //如果parent文件不存在,就会报异常 8 File file = new File( parent , "small_cat.txt" ) ; 9 10 try { 11 file.createNewFile() ; 12 } catch (IOException e) { 13 e.printStackTrace(); 14 }
效果图:
- 创建目录
1 boolean file.mkdirs()
如果创建成功,返回 true
, 创建失败,返回false
。如果这个文件夹已经存在,则返回false
.
只能创建一级目录,如果父目录不存在,返回false
.
- 创建多级目录
1 boolean file.mkdirs()
创建多级目录,创建成功,返回true
,创建失败,返回false
。如果父目录不存在,就创建,并且返回true.
- 创建一个新的文件
1 boolean file.createNewFile() ;
如果文件不存在就创建该文件,创建成功,返回 true
;创建失败,返回false
。如果这个文件已经存在,则返回false
.
- 判断方法
1 boolean file.exists() //文件是否存在 2 3 boolean file.isFile() //是否是文件 4 5 boolean file.isDirectory() //是否是目录 6 7 boolean file.isHidden() //是否隐藏(windows上可以设置某个文件是否隐藏) 8 9 boolean file.isAbsolute() //是否为绝对路径 10 11 boolean file.canRead() //是否可读 12 13 boolean file.canWrite() //是否可写 14 15 boolean file.canExecute() //是否可执行
获取文件的信息
1 String file.getName() //获取文件的名字,只是名字,没有路径 2 3 String file.getParent() //获取父目录的绝对路径,返回值是一个字符串。如果文件有父目录,那么返回父目录的绝对路径,(比如:`E:\cat`) , 如果文件本身就在磁盘的根目录,那么返回磁盘的路径,(比如:`E:\`)。 4 5 File file.getParentFile() //获取父文件,返回值是一个File对象。 6 7 long time = file.lastModified() ; //返回文件最后一次修改的时间 8 Date dt = new Date(time); 9 10 boolean renameTo(File file) //文件命名 11 12 long file.length() //返回文件的大小,单位字节 13 14 boolean file.delete() //删除文件 15 16 String[] file.list() //获取该目录下的所有的文件的名字。如果`file`为文件,返回值为`null`,在使用时记得判空;但是如果`file`为目录,那么返回这个目录下所有文件的名字,只是名字,不含路径;如果`file`是一个空目录,返回一个长度为0的数组;从上面的结果可以看出,`list()` 方法,只是对`file`为目录时有效,当`file`为一个文件的时候,该方法毫无意义。 17 18 File[] file.listFiles() //获取该目录下的所有的文件。如果`file`为文件,返回值为`null`,在使用时记得判空;但是如果`file`为目录,那么返回这个目录下所有的文件 ;如果`file`是一个空目录,返回一个长度为0的数组;从上面的结果可以看出,`listFiles()` 方法,只是对`file`为目录时有效,当`file`为一个文件的时候,该方法毫无意义。
实战经验1: file.list() , file.listFiles()
1 String filePath = "E:/cat" ; 2 File file = new File( filePath ) ; 3 file.mkdir() ; 4 5 String[] names = file.list() ; 6 7 for( int i = 0 ; i < names.length ; i++ ){ 8 System.out.println( "names: " +names[i]); 9 } 10 11 File[] files = file.listFiles() ; 12 for( int i = 0 ; i < files.length ; i++ ){ 13 System.out.println( "files: "+ files[i].getAbsolutePath() ); 14 }
效果图:
实战经验2:扫描F盘所有的文件
1 public class A3 { 2 3 public static void main(String[] args) throws IOException { 4 5 String filePath = "F:/" ; 6 File file = new File( filePath ) ; 7 getFile(file); 8 9 } 10 11 12 private static void getFile( File file ){ 13 File[] files = file.listFiles() ; 14 for( File f : files ){ 15 if ( f.isHidden() ) continue ; 16 17 if(f.isDirectory() ){ 18 getFile( f ); 19 }else{ 20 System.out.println( f.getAbsolutePath() + " " + f.getName() ); 21 } 22 } 23 } 24 }
效果图:
在上面的实战演练中用到了,file.list()
, file.listFiles()
。这是两个无参的方法,实际上还有两个有参的方法,分别是
1 file.list(FilenameFilter filter) ; 2 3 file.listFiles( FilenameFilter filter) ; 4 5 file.listFiles(FileFilter filter)
FileFilter
FileFilter是io包里面的一个接口,从名字上可以看出,这个类是文件过滤功能的。
需要重写accept
方法
1 static class MyFileFilter implements FileFilter { 2 3 MyFileFilter(){ 4 } 5 6 //pathname:文件的绝对路径+ 文件名 , 比如:F:\安来宁 - 难得.mp3 , 或者: F:\文件夹1 7 @Override 8 public boolean accept(File pathname) { 9 return false; 10 } 11 }
实战:获取指定目录的所有文件夹
1 package com.app; 2 import java.io.File; 3 import java.io.FileFilter; 4 import java.io.IOException; 5 6 7 public class A3 { 8 9 public static void main(String[] args) throws IOException { 10 11 String filePath = "F:/" ; 12 File file = new File( filePath ) ; 13 getFile(file); 14 15 } 16 17 18 /** 19 * 获取指定目录的所有文件夹 20 * @param file 21 */ 22 private static void getFile( File file ){ 23 MyFileFilter myFileFilter = new MyFileFilter() ; 24 25 File[] files = file.listFiles( myFileFilter ) ; 26 for( File f : files ){ 27 if ( f.isHidden() ) continue ; 28 29 System.out.println( f.getAbsolutePath() ); 30 } 31 } 32 33 34 static class MyFileFilter implements FileFilter { 35 36 MyFileFilter(){ 37 38 } 39 40 //pathname:文件的绝对路径+ 文件名 , 比如:F:\安来宁 - 难得.mp3 , 或者: F:\文件夹1 41 @Override 42 public boolean accept(File pathname) { 43 if( pathname.isDirectory() ){ 44 return true ; 45 } 46 return false; 47 } 48 49 } 50 51 }
FilenameFilter
FileFilter是io包里面的一个接口,从名字上可以看出,这个类是文件名字过滤功能的。
需要重写里面的accept
方法。
比如:
1 package com.app; 2 3 import java.io.File; 4 import java.io.FilenameFilter; 5 6 public class MyFilenameFilter implements FilenameFilter { 7 //type为需要过滤的条件,比如如果type=".jpg",则只能返回后缀为jpg的文件 8 private String type; 9 MyFilenameFilter( String type){ 10 this.type = type ; 11 } 12 13 @Override 14 public boolean accept(File dir, String name) { 15 //dir表示文件的当前目录,name表示文件名; 16 return name.endsWith( type ) ; 17 } 18 19 }
实战:扫描出指定路径的所有图片
1 package com.app; 2 import java.io.File; 3 import java.io.FilenameFilter; 4 import java.io.IOException; 5 6 7 public class A3 { 8 9 public static void main(String[] args) throws IOException { 10 11 String filePath = "F:/" ; 12 File file = new File( filePath ) ; 13 getFile(file); 14 15 } 16 17 18 /** 19 * 扫描出指定路径的所有图片 20 * @param file 21 */ 22 private static void getFile( File file ){ 23 MyFilenameFilter myFileFilter = new MyFilenameFilter( ".png") ; 24 25 File[] files = file.listFiles( myFileFilter ) ; 26 for( File f : files ){ 27 if ( f.isHidden() ) continue ; 28 29 System.out.println( f.getAbsolutePath() ); 30 } 31 } 32 33 34 35 static class MyFilenameFilter implements FilenameFilter { 36 //type为需要过滤的条件,比如如果type=".jpg",则只能返回后缀为jpg的文件 37 private String type; 38 MyFilenameFilter( String type){ 39 this.type = type ; 40 } 41 42 @Override 43 public boolean accept(File dir, String name) { 44 //dir表示文件的当前目录,name表示文件名; 45 return name.endsWith( type ) ; 46 } 47 48 } 49 50 }
运行结果: