关于文件File的笔记

来源:互联网 发布:大数据与统计新思维 编辑:程序博客网 时间:2024/06/05 07:59

关于文件File的笔记

 

Filejava IO中很重要的类,可以获得和设置文件的属性,等等。

 

构造方法:

File(String pathname)文件或者目录路径

File(String parent,String child)

FIle(File parent,String child)

常用方法:

1canRead()

2canWrite()

3boolean delete(),如果是目录且含子目录或者文件,则无法删除,而且对于一些特殊情况也无法删除。此方法没有异常抛出。

4boolean exists()文件或者目录是否存在,new File()得到File对象并不代表文件或者目录实际存在,物理文件存在时才为true

5getName()得到文件或者目录名,不包括父目录。

6getParent(),获得目录,分别是:

 

1)如果使用点“.”的相对路径创建文件,返回点“.

2)使用相对路径(没有用点“..)创建文件,返回null

3)使用绝对路径创建文件,返回其父目录,如File file2 =new File("C://Test//wangliang2.txt");则返回C:/Test

4)使用父目录创建文件,如File file4= new File("F://test//..//王亮4.txt");返回F:/test/..

 

 

7getAbsolutePath()

8getPath()

getPath()getAbsolutePath()的区别:

1)如果文件使用绝对路径创建的,那么两者相等

2)如果使用相对路径创建文件,结果不同:

如果当前目录C:/(CMD所在目录,而.class文件放在C:/)

File file =new File(".//wangliang.txt");

if(!file.exists())file.createNewFile();

System.out.println("file文件绝对目录:"+file.getAbsolutePath()+" file文件目录"+file.getPath());

file文件绝对目录:C://./wangliang.txt file文件目录./wangliang.txt

 

File file3 =new File("wangliang3.txt");

if(!file3.exists())file3.createNewFile();

System.out.println("file3文件绝对目录:"+file3.getAbsolutePath()+" file3文件目录"+file3.getPath());

file3文件绝对目录:C://wangliang3.txt file3文件目录wangliang3.txt

 

如果CMD是默认路径C:/Documents and Settings/Administrator>,则结果为

file文件绝对目录:C:/Documents and Settings/Administrator/./wangliang.txt file

文件目录./wangliang.txt

file3文件绝对目录:C:/Documents and Settings/Administrator/wangliang3.txt file3

文件目录wangliang3.txt

 

9getCanonicalPath(),不管文件是否使用绝对路径创建,得到的是绝对路径(不含点号.和多余的斜杠/)。

 

一个例子

File file4= new File("F://test//..//王亮4.txt");

if(!file4.exists())file4.createNewFile();

System.out.println("file4文件绝对目录:"+file4.getAbsolutePath()+";file4文件目录"+file4.getPath()+";file4正规目录"+file4.getCanonicalPath());

 

C:/运行

file4文件绝对目录:F:/test/../王亮4.txt;file4文件目录F:/test/../王亮4.txt;file4

正规目录F:/王亮4.txt

在默认的路径下运行

file4文件绝对目录:F:/test/../王亮4.txt;file4文件目录F:/test/../王亮4.txt;file4

正规目录F:/王亮4.txt

 

所以正规目录getCanonicalPath()比较好

 

10isFile()

11isDirectory()

【注意】:当文件或者目录不存在时,false,也就是说当exists()false时上面两个方法都是false

12isAbsolute()文件或者目录是否为绝对路径,注意File file4= new File("F://test//..//王亮4.txt")也是绝对路径

13String[] list()

如果此抽象路径名不表示一个目录,此方法返回 null。否则返回一个字符串数组。每个字符串是一个文件名,而不是一条完整路径。

不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。

13File[] listFiles()

如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个 File 对象数组,得到的每个抽象路径名都是根据此抽象路径名,使用 File(File, String)构造方法构造的。所以,如果此路径名是绝对路径名,那么得到的每个路径名都是绝对路径名;如果此路径名是相对路径名,那么得到的每个路径名都是相对于同一目录的路径名。

14boolean createNewFile()文件的父目录要存在(否则出错);如果文件已经存在则不会重复创建文件

15boolean mkdirs()创建目录,父目录以及以上的目录都不不存也会创建父目录

16boolean mkdir(),父目录存在时才会创建目录,否则无效,但是没有异常

 

 

 

下面看两个稍微复杂的例子

1】获得目录下的所有文件和目录:

File dir =new File("F://Test//wangliang文件夹");

if(!dir.exists())dir.mkdir();

System.out.println(dir.getParent());

System.out.println(dir.isAbsolute());

System.out.println("=====================");

File[] sons = dir.listFiles();

for(File son:sons){

      if(son.isFile())

             System.out.println("文件:"+son);

      else

             System.out.println("目录:"+son);

 

}

=====================

目录:F:/Test/wangliang文件夹/新建文件夹

文件:F:/Test/wangliang文件夹/新建文本文档.txt

目录:F:/Test/wangliang文件夹/新建文件夹 (2)

文件:F:/Test/wangliang文件夹/新建 Microsoft Excel 工作表.xls

 

 

2】删除目录及其目录下的文件和子目录

static void deleteDir(File dir){

      if(dir.isFile()){

             dir.delete();

             return ;

      }

      if(dir.isDirectory()){

             File[] lists = dir.listFiles();

             for(File file:lists){

                    deleteDir(file);

             }

             dir.delete();

      }

      return ;

}

 

3】复制目录及其目录下的文件和子目录

static void copyDir(String src,String desc) throws IOException{

      File srcDirRoot = new File(src);

      File descDirRoot = new File(desc);

      if(srcDirRoot.isFile()){

             FileInputStream in = new FileInputStream(srcDirRoot);

             File f = new File(descDirRoot,srcDirRoot.getName());

             FileOutputStream out = new FileOutputStream(f,true);

             byte[] buf = new byte[1024];

             int len = 0;

             while((len=in.read(buf))!=-1){

                   out.write(buf);

             }

             in.close();

             out.close();

             return ;

      }

      if(srcDirRoot.isDirectory()){

             if(!descDirRoot.exists())

                    descDirRoot.mkdirs();

             File d = new File(descDirRoot,srcDirRoot.getName());

             if(!d.exists())

                    d.mkdir();

             File [] lists = srcDirRoot.listFiles();

             for(File file:lists){

                    copyDir(file.toString(),d.getPath());

             }    

      }

}