AmazingCounters.com

File类

java.io.File类是在整个java.io包中最特殊的一个类,表示的是文件本身的若干操作,那么所谓的文件本身指的并不是对文件的内容操作,而是对文件的创建、删除等等这些的操作。

         File类中提供了如下的几个与文件本身有关的操作方法:

                   · 构造方法:public File(String pathname),应该给出要操作文件的路径;

                   · 创建文件:public boolean createNewFile() throws IOException;

                   · 删除文件:public boolean delete();

                   · 判断文件是否存在:public boolean exists();

范例:观察方法的操作

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:\\test.txt"); // 指定要操作的文件
 6         if (file.exists()) { // 判断文件是否存在
 7             file.delete(); // 删除文件
 8         } else {
 9             file.createNewFile(); // 创建文件
10         }
11     }
12 }

当指定绝对路径时,定义目录分隔符有两种方式:

1、反斜线但是一定要写两个。\\new File ("d:\\test.txt");

2、斜线/  写一个即可。new File("d:/test.txt");

但是这个时候此程序有以下的几个问题:

· 问题一:在定义File类对象的时候需要指定一个文件的路径,但是这个路径有分隔符的问题,由于Java属于多操作系统支持,所以每一个所编写的程序必须考虑到操作系统的问题:

         |- windows之中分隔符是“\”;

         |- linux之中分隔符是“/”

         为了解决此问题,在File类提供了一个常量:public static final String separator

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:" + File.separator + "test.txt"); // 指定要操作的文件
 6         if (file.exists()) { // 判断文件是否存在
 7             file.delete(); // 删除文件
 8         } else {
 9             file.createNewFile(); // 创建文件
10         }
11     }
12 }

· 问题二:操作之中会出现延迟的问题,当创建文件或者是删除文件的时候会出现延迟,因为Java的程序都是通过JVM与操作系统间进行交互的,这之中就一定会存在延迟的问题;

                   · 问题三:此时是直接在一个硬盘的根目录下创建的新文件,如果说现在要创建的文件有文件夹呢?

         此时应该先进行文件夹的创建,创建文件夹可以使用:public boolean mkdir()

         找到指定File的上一级目录:public File getParentFile()

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:" + File.separator + "iodemo" + File.separator
 6                 + "test.txt"); // 指定要操作的文件
 7         if (!file.getParentFile().exists()) { // 判断上一级文件夹是否存在
 8             file.getParentFile().mkdir();
 9         }
10         file.createNewFile(); // 创建文件
11     }
12 }

         但是此程序有一个比较麻烦的问题在于此时只能创建一个级别的父文件夹,如果现在的文件夹较多的话,那么就必须采用另外一个方法:public boolean mkdirs()

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:" + File.separator + "iodemo" + File.separator
 6                 + "hello" + File.separator + "test.txt"); // 指定要操作的文件
 7         if (!file.getParentFile().exists()) { // 判断上一级文件夹是否存在
 8             file.getParentFile().mkdirs();
 9         }
10         file.createNewFile(); // 创建文件
11     }
12 }

         所以在以后的开发之中肯定要使用mkdirs()方法操作是比较合理的做法。

         如果现在要想列出一个文件夹中的全部内容,则可以采用以下的方法:

                   · 列出所有文件:public String[] list()

                   · 列出所有文件:public File[] listFiles()

                   · 判断给定的路径是否是文件夹:public boolean isDirectory()

                   · 判断给定的路径是否是文件:public boolean isFile()

范例:先使用list()方法列出

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:" + File.separator + "testjava"); // 指定要操作的文件
 6         if (file.exists()) { // 文件存在
 7             if (file.isDirectory()) { // 是文件夹
 8                 String[] all = file.list();
 9                 for (int x = 0; x < all.length; x++) {
10                     System.out.println(all[x]);
11                 }
12             }
13         }
14     }
15 }

         这个时候所列出的只是文件夹或文件的名称而已,如果真的是操作的话,并不方便。

范例:使用listFiles()方法列出

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:" + File.separator + "testjava"); // 指定要操作的文件
 6         if (file.exists()) { // 文件存在
 7             if (file.isDirectory()) { // 是文件夹
 8                 File[] all = file.listFiles();
 9                 for (int x = 0; x < all.length; x++) {
10                     System.out.println(all[x]);
11                 }
12             }
13         }
14     }
15 }

很明显,这个操作所返回的是多个File类的对象,所以如果从操作的方便性而言,此方式肯定是最方便的。

思考题:要求给定一个文件夹的名称,之后可以将此文件夹中的全部内容进行列出,列出的时候也要列出所有的子文件夹中的内容。

         此时,根本就不知道本程序需要循环多少次,而唯一的结束条件就是所有的内容都被列出来,只要还有文件就要一直列出,则对于此种代码只能通过递归的方式完成。

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:" + File.separator); // 指定要操作的文件
 6         fun(file);
 7     }
 8     public static void fun(File file) {
 9         if (file.isDirectory()) {
10             File all[] = file.listFiles();
11             if (all != null) {
12                 for (int x = 0; x < all.length; x++) {
13                     fun(all[x]);
14                 }
15             }
16         } else { // 没有文件夹了,直接输出
17             System.out.println(file);
18         }
19     }
20 }

         如果将此代码稍微修改一下,就成恶性程序,把输出换成删除。

 1 package org.lxh.demo;
 2 import java.io.File;
 3 public class IODemo {
 4     public static void main(String[] args) throws Exception {
 5         File file = new File("d:" + File.separator + "testjava"); // 指定要操作的文件
 6         fun(file);
 7     }
 8     public static void fun(File file) {
 9         if (file.isDirectory()) {
10             File all[] = file.listFiles();
11             if (all != null) {
12                 for (int x = 0; x < all.length; x++) {
13                     fun(all[x]);
14                 }
15             }
16         }
17         file.delete();
18     }
19 }

将遍历的目录树状显示

 1 import java.io.File;
 2 
 3 public class ListTest03 {
 4 
 5     public static void main(String[] args) {
 6         listFile("d:\\DG343Std_x86", 1);
 7 
 8     }
 9 
10     public static void listFile(String dir, int level) {
11         File f = new File(dir);
12         for (int i = 0; i <= level; i++) {
13             System.out.print("| ");
14         }
15         System.out.println("|-" + f.getName());
16         if (f.isDirectory()) {
17             File fs[] = f.listFiles();
18             for (File s : fs) {
19                 listFile(s.getPath(), level + 1);
20             }
21         }
22     }
23 
24 }
 1 import java.io.File;
 2 
 3 public class FileTree {
 4     public static void main(String[] args) {
 5         File f = new File("d:/aaa");
 6         printFile(f, 0);
 7     }
 8     
 9     static void printFile(File file,int level){
10         for (int i = 0; i < level; i++) {
11             System.out.print("-");
12         }
13         System.out.println(file.getName()); 
14         
15         if(file.isDirectory()){
16             File[]  files = file.listFiles();
17             for (File temp : files) {
18                 printFile(temp, level+1);
19             }
20         }
21     }
22 }

 

posted @ 2015-12-01 20:01  御史  阅读(121)  评论(0编辑  收藏  举报