黑馬程序員_

--------------------ASP.Net+Android+IOS開發.Net培訓、期待與您交流! --------------------


1. File

File類是把文件和文件夾封裝成了對象,方便操作文件或者是文件夾的屬性,在創建的時候有通過構造方法來指定,有三種格式:

new File(“C:\\java\\a.txt”);

new File(“C:\\java”,“a.txt”);//這一種方法比第一種方法的優點是:把路徑分開了,可以方便指定同一個文件夾下的文件

new File(“C:”+ File.separator +” java”+”a.txt”);//這一個方法可跨平臺的使用,分隔符是跨平臺的File.separator。

 

2. 基本方法

       1.創建

創建分爲創建文件和創建文件夾(目錄)


import java.io.File;
import java.io.IOException;
 
public class FileDemo {
   public static void main(String[] args) throws IOException {
     /* 指定文件對象 */
     File f = new File("F:" + File.separator + "java");
     File file = new File("F:\\java\\a.txt");
 
     /*
      * boolean mkdir()創建單級目錄,當存在此目錄,創建失敗(false),否則創建成功(true) 例如:F:\\java
      * F盤必須存在 F:\\java\123 F:\\java必須存在 boolean
      * mkdirs()可以創建多級目錄,即使前面的目錄不存在,那麼也會創建,存在此創建失敗,不存在創建成功
      * 例如:F:\\java\day01\\hello 即使F盤中不存在java\\day01 那麼使用此方法,也會創建前面不存在的目錄
      * createNewFile()
      * 創建文件,指定的目錄必須存在(F:\\java),如果此目錄中存在此文件,此創建失敗(false),不存在,則創建成功(true)
      */
 
     System.out.println(f.mkdir());// 創建單級目錄
     System.out.println(file.createNewFile());// 創建文件
     System.out.println(new File("F:\\java\\123\\456").mkdirs());// 創建多級目錄
   }
 
}


 

       2. 刪除


   

public class FileDemo {
   public static void main(String[] args) throws IOException {
     /* 指定文件對象 */
     File f = new File("F:" + File.separator + "java");
     File file = new File("F:\\java\\a.txt");
 
     /*
      *  boolean delete()刪除文件或者是目錄(空的),如果不存在,則是false,存在則刪除
      *  void deleteOnExit()程序退出時刪除,即使前面出現了異常,那麼在程序結束的時候也會執行此語句,刪除此文件
      */
 
     System.out.println(f.delete());// 刪除目錄
     System.out.println(file.delete());// 刪除文件
    
   }
 
}

 

       3. 判斷

 

import java.io.File;
import java.io.IOException;
 
public class FileDemo {
   public static void main(String[] args) throws IOException {
     /* 指定文件對象 */
     File f = new File("F:" + File.separator + "java");
     File file = new File("F:\\java\\a.txt");
 
     /*
      * boolean exists()判斷文件或者目錄是否存在 boolean isFile()判斷是否是文件 boolean
      * isDirectory()判斷是否是目錄 boolean isHidden()判斷是否是隱藏文件 boolean
      * isAbsolute()判斷是否是絕對路徑
      */
 
     System.out.println(f.exists());// 是否存在
     System.out.println(file.isFile());// 是否是文件,若存在,切是文件,那麼就是true,否則是false
     System.out.println(file.isDirectory());// 判斷是否是目錄,存在且是文件,那麼就是true,否則是false
     System.out.println(file.isAbsolute());// 判斷是否是絕對路徑
   }
 
}


 

         4. 獲取

 

boolean renameTo(File dest)重命名,也可以模擬移動哦,重命名到其他文件夾中,那就是移動了


import java.io.File;
import java.io.IOException;
 
public class FileDemo {
   public static void main(String[] args) throws IOException {
     /* 指定文件對象 */
     File f = new File("F:" + File.separator + "java");
     File file = new File("F:\\java\\a.txt");
 
     /*
      * String getName()獲得文件名稱
      * String getParent()獲得上一目錄 String
      * getAbsolutePath()獲得絕對路徑
      * long length()獲得文件大小 long
      * lastModified()獲得最後一次修改的時間
      */
 
     System.out.println(f.getName());// 獲得名稱
     System.out.println(file.getName());// 獲得名稱
     System.out.println(f.getParent());// 獲得上一目錄
     System.out.println(file.getParent());// 獲得上一目錄
     System.out.println(f.getAbsolutePath());// 獲得絕對路徑
     System.out.println(file.getAbsolutePath());// 獲得絕對路徑
   }
 
}
結果:
java
a.txt
F:\
F:\java
F:\java
F:\java\a.txt


 

3.常用方法

 

public class FileDemo {
 
   public static void main(String[] args) throws IOException {
     /*
      * String[] list()獲得指定文件下的所有文件或者目錄的名稱(包含隱藏文件活目錄)
           String[] list(FilenameFilter filter)獲得名稱的時候加入了過濾器(包含隱藏文件活目錄)
      * File[] listFiles()獲得的是指定文件下的所有File對象(包含隱藏文件活目錄)
      *  File[] listFiles(FilenameFilter filter)加入了過濾器(包含隱藏文件活目錄)
      *  static File[]listRoots()列出了可用目錄的根
      */
     /* 獲得所有的根目錄,並打印出 */
     File[] rootFiles = File.listRoots();
     for (File f : rootFiles)
        System.out.println(f);
     /* 獲得F盤下的所有文件或者目錄的名稱,並打印出 */
     String[] fileNames = new File("F:\\").list();
     System.out.println("-----------------\n所有名稱");
     for (String name : fileNames)
        System.out.println(name);
     /* 獲得F盤下的所有.txt文件安的名稱,並打印出,使用的是過濾器,使用匿名內部類,複寫accept方法 */
     String[] fileTxtNames = new File("F:\\").list(new FilenameFilter() {
        public boolean accept(File dir, String name) {// 此方法決定是否把其名字過濾
          return name.endsWith(".txt");
        }
     });
     System.out.println("-----------------\n.txt文件");
     for (String n : fileTxtNames)
        System.out.println(n);
     /*File[] listFiles()用法和list()用法一樣,只是返回的是File對象數組*/
     File [] Files=new File("F:\\").listFiles();
     System.out.println("-----------------");
     for(File f:Files)
        System.out.println(f.getName()+":"+f.length());
   }
 
}
結果:
C:\
D:\
E:\
F:\
G:\
-----------------
所有名稱
$RECYCLE.BIN
A
B
ClassDemo.java
Config.Msi
demo.txt
demo1.txt
exception.log
IP地址.doc
itat
java培訓視頻
jsp
music
System Volume Information
SystemInfo.txt
voa
yy
錄音
新建文本文檔.txt
照片
電子書
隨筆知識點
黑馬
黑馬筆記
-----------------
.txt文件
demo.txt
demo1.txt
SystemInfo.txt
新建文本文檔.txt
-----------------
$RECYCLE.BIN:4096
A:0
B:0
ClassDemo.java:682
Config.Msi:0
demo.txt:6
demo1.txt:8
exception.log:123
IP地址.doc:58368
itat:4096
java培訓視頻:4096
jsp:4096
music:28672
SystemVolume Information:0
SystemInfo.txt:1904
voa:0
yy:0
錄音:4096
新建文本文檔.txt:29
照片:4096
電子書:4096
隨筆知識點:4096
黑馬:4096
黑馬筆記:16384


 

4. 輸出目錄下的所有內容

 

利用的是遞歸算法

 

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
 
public class FileDemo {
 
   public static void main(String[] args) throws IOException {
     File file = new File("F:\\黑馬");
     showDir(file, 0);
   }
 
   /* 格式方式 */
   public static String show(int level) {
     StringBuilder sb = new StringBuilder();
     sb.append("|-");
     for (int i = 0; i < level; i++) {
        sb.insert(0, "  ");
     }
     return sb.toString();
   }
 
   /* 利用遞歸顯示 */
   public static void showDir(File dir, int level) {
     System.out.println(show(level) + dir.getName());
     level++;
     File[] Files= dir.listFiles();
     for (int x = 0; x < Files.length; x++) {
        if (Files[x].isDirectory()){// 若是目錄,繼續遞歸
           showDir(Files[x], level);
        } else {
          System.out.println(show(level) + Files[x].getName());
        }
     }
   }
}
結果:
|-heima
  |-Game.rar
  |-Java常用英語彙總.doc
  |-java特性.jpg
  |-思維導圖
    |-01-Java 概述.png
    |-02-Java基礎語法.png
    |-03-面向對象.png
  |-面試測試題
    |-aa.java
    |-exam.zip
  |-黑馬活動
    |-DVD管理系統----附帶代碼
      |-DVD管理系統簡介.doc
    |-公約數和公倍數---附帶代碼
      |-gysAndgbs.java
      |-Person.java
      |-sushu.java
      |-公約數,公倍數和素數.doc
    |-員工打卡系統----附帶代碼
      |-員工打卡系統.doc
    |-打印系統----附帶代碼
      |-打印系統.doc
    |-提交作業驗證系統---附帶代碼
      |-作業提交驗證.doc
    |-算法--迭代和遞歸---附帶代碼
      |-方程的解-迭代,遞歸.doc
      |-方程解---代碼.doc
      |-方程解---迭代圖.png
      |-階乘--遞歸---代碼.doc
      |-階乘運行結果案例.png


 

5. 刪除文件夾

思路:

從裏向外刪除,先刪除文加夾中的文件。當文件沒了,然後在刪除此空文件夾,因爲文件夾中有文件的話,刪除不了。所以先清除裏面的文件。使用的也是遞歸。

 

import java.io.File;
 
public class DeleteFileDemo {
   public static void main(String[] args) {
     File file = new File("F:\\heima");
     deleteDir(file);
 
   }
 
   public static void deleteDir(File dir) {
     File[] files = dir.listFiles();
     for (int i = 0; i < files.length; i++) {
        if (files[i].isDirectory())
          deleteDir(files[i]);
        else
          System.out.println(files[i].delete());
     }
     System.out.println(dir.delete());
   }
 
}


 

6.     練習

一個文件夾中的文件路徑存到一個文件中,這樣可以方便我們查找。

思路:

           1. 遍歷文件夾中的所有文件,找到我們符合條件的文件,然後存到一個集合中。

          2. 遍歷此集合,然後存到一個文件中。


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
public class Demo {
 
  public static void main(String[] args) throws IOException {
    File file= new File("F:\\黑馬筆記");
    File filepath = new File("F:\\doc.txt");
    List<File> list = new ArrayList<File>();
    getFile(file,list);
    writerToFile(list, filepath);
    System.out.println("OVER");
  }
 
  /* 遍歷列表,將其存到集合中 */
  public static void getFile(File dir, List<File> listFiles) {
    File[] files = dir.listFiles();
    /* 遍歷列表,存到集合中 */
    for (File f : files) {
      if (f.isDirectory()) {
         getFile(f, listFiles);
      } else {
         if (f.getName().endsWith(".doc"))// 判斷是否是doc文件
           listFiles.add(f);
      }
    }
 
  }
 
  /* 遍歷集合,寫到文件中 */
  public static void writerToFile(List<File> listFiles, File FilePaths)
      throws IOException {
    BufferedWriter bw = new BufferedWriter(new FileWriter(FilePaths));// 定義的寫入流
    /* 遍歷集合,把其寫到文件中 */
    for (File f : listFiles) {
      bw.write(f.getAbsolutePath());// 將絕對路徑寫到文件中
      bw.newLine();
      bw.flush();
    }
    bw.close();
  }
}
結果:


 



--------------------ASP.Net+Android+IOS開發.Net培訓、期待與您交流! --------------------

 


發佈了46 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章