1. 程式人生 > >Java IO流之File分析

Java IO流之File分析

簡介

檔案和目錄路徑名的抽象表示方式.File類可以用於檔案和目錄的建立,檔案查詢和檔案刪除等.File類實現了Serializable和Comparable介面,可以進行序列化和檔案大小的比較.

File介紹

1.構造方法

public File(String pathname) {}
public File(String parent, String child) {}
public File(File parent, String child) {}
public File(URI uri) {}
  • 根據指定路徑名字串轉換成抽象路徑名來建立File物件.
  • 根據parent路徑名字串和child路徑名字串來建立File物件.
  • 根據parent抽象路徑名和child路徑名字串來建立File物件.
  • 根據給定的file:URI轉成抽象路徑名建立一個File物件.

2.內部變數

private static final FileSystem fs = DefaultFileSystem.getFileSystem();
private final String path;
private static enum PathStatus { INVALID, CHECKED };
private transient PathStatus status = null;
private final transient int prefixLength;
public static final char separatorChar
public static final String separator
public static final char pathSeparatorChar 
public static final String pathSeparator
  • fs----返回平臺預設的檔案系統物件.
  • path----路徑名字串.
  • PathStatus----表示的是檔案路徑的狀態.
  • status----用來標識檔案路徑是否有效.
  • prefixLength----抽象路徑名的字首的長度.
  • separatorChar----系統依賴的預設名稱分割符.在UNIX系統中是'/',在Microsoft Windows系統中是"//".
  • separator----系統依賴的預設名稱分割符.在UNIX系統中是'/',在Microsoft Windows系統中是"//".
  • pathSeparatorChar----在UNIX系統中是':',在Microsoft Windows系統中是";".
  • pathSeparator----在UNIX系統中是':',在Microsoft Windows系統中是";".

3.內部方法

//返回此抽象路徑名錶示的檔案或者目錄的名稱.
public String getName() {}
//返回此抽象路徑名父目錄的路徑名字串,如果此路徑名沒有指定父目錄,返回null.
public String getParent() {}
//返回此抽象路徑名父目錄的抽象路徑名,如果此路徑名沒有指定父目錄,則返回 null.
public File getParentFile() {}
//將此抽象路徑名轉換為一個路徑名字串.
public String getPath() {}
//測試此抽象路徑名是否為絕對路徑名.
public boolean isAbsolute() {}
//返回抽象路徑名的絕對路徑名字串.
public String getAbsolutePath() {}
//返回此抽象路徑名的絕對路徑名字串.
public File getAbsoluteFile() {}
//返回此抽象路徑名的規範路徑名字串.
public String getCanonicalPath() {}
//返回此抽象路徑名的規範形式.
public File getCanonicalFile() {}
//構造一個表示此抽象路徑名的file:URI.
public URI toURI() {}
//測試應用程式是否可讀取此抽象路徑名錶示的檔案.
public boolean canRead() {}
//測試應用程式是否可以修改此抽象路徑名錶示的檔案.
public boolean canWrite() {}
//測試此抽象路徑名錶示的檔案或目錄是否存在.
public boolean exists() {}
//測試此抽象路徑名錶示的檔案是否是一個目錄.
public boolean isDirectory() {}
//測試此抽象路徑名錶示的檔案是否是一個標準檔案.
public boolean isFile() {}
//測試此抽象路徑名指定的檔案是否是一個隱藏檔案.
public boolean isHidden() {}
//返回此抽象路徑名錶示的檔案最後一次被修改的時間.
public long lastModified() {}
//返回由此抽象路徑名錶示的檔案的長度
public long length() {}
//當且僅當不存在具有此抽象路徑名指定名稱的檔案時,不可分地建立一個新的空檔案.
public boolean createNewFile(){}
//刪除此抽象路徑名錶示的檔案或目錄.
public boolean delete() {}
//在虛擬機器終止時,請求刪除此抽象路徑名錶示的檔案或目錄.
public void deleteOnExit() {}
//返回一個字串陣列,這些字串指定此抽象路徑名錶示的目錄中的檔案和目錄
public String[] list() {}
// 返回一個字串陣列,這些字串指定此抽象路徑名錶示的目錄中滿足指定過濾器的檔案和目錄.
public String[] list(FilenameFilter filter){}
//返回一個抽象路徑名陣列,這些路徑名錶示此抽象路徑名錶示的目錄中的檔案.
public File[] listFiles() {}
//返回抽象路徑名陣列,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的檔案和目錄.
public File[] listFiles(FilenameFilter filter) {}
//返回抽象路徑名陣列,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的檔案和目錄.
public File[] listFiles(FileFilter filter){}
//建立此抽象路徑名指定的目錄.
public boolean mkdir() {}
//建立此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄.
public boolean mkdirs() {}
//重新命名此抽象路徑名錶示的檔案.
public boolean renameTo(File dest) {}
//設定此抽象路徑名指定的檔案或目錄的最後一次修改時間.
public boolean setLastModified(long time) {}
//標記此抽象路徑名指定的檔案或目錄,從而只能對其進行讀操作.
public boolean setReadOnly() {}
//設定此抽象路徑名的所有者或所有使用者的寫許可權.
public boolean setWritable(boolean writable, boolean ownerOnly) {}
//設定此抽象路徑名所有者寫許可權的一個便捷方法.
public boolean setWritable(boolean writable) {}
//設定此抽象路徑名的所有者或所有使用者的讀許可權.
public boolean setReadable(boolean readable, boolean ownerOnly) {}
//設定此抽象路徑名所有者讀許可權的一個便捷方法.
public boolean setReadable(boolean readable) {}
//設定此抽象路徑名的所有者或所有使用者的執行許可權.
public boolean setExecutable(boolean executable, boolean ownerOnly) {}
//設定此抽象路徑名所有者執行許可權的一個便捷方法.
public boolean setExecutable(boolean executable) {}
//設定此抽象路徑名的所有者或所有使用者的執行許可權.
public boolean canExecute() {}
//列出可用的檔案系統根.
public static File[] listRoots() {}
//返回此抽象路徑名指定的分割槽大小.
public long getTotalSpace() {}
//返回此抽象路徑名指定的分割槽中未分配的位元組數.
public long getFreeSpace() {}
//返回此抽象路徑名指定的分割槽上可用於此虛擬機器的位元組數.
public long getUsableSpace() {}
//在指定目錄中建立一個新的空檔案,使用給定的字首和字尾字串生成其名稱.
public static File createTempFile(String prefix, String suffix,File directory){}
//在預設臨時檔案目錄中建立一個空檔案,使用給定字首和字尾生成其名稱.
public static File createTempFile(String prefix, String suffix){}
//按字母順序比較兩個抽象路徑名.
public int compareTo(File pathname) {}
//返回抽象路徑構建的Path物件.
public Path toPath() {}

File方法總結:

一.新建目錄或者檔案(方法mkDir(),方法mkdirs(),方法createNewFile())

1.方法mkdir():父級目錄必須存在,即在已有目錄下面建立目錄,.mkdir()方法不能建立多級目錄,比如:可以在已有目錄D:/java下面建立home目錄,不能建立home/jre多級目錄.構造方法如下:

方式1:File file1= new File("D:/java/home");

方式2:File file2 = new File("D:/java","home");

方式3:URI uri = new URI("file:D:/java/home");(注意格式是"file:/D:/java/home")

          File file = new File(uri);

2.方法mkdirs() : 建立多級不存在的目錄.比如:可以建立多級目錄D:/java/home.即D盤下面java資料夾不存在.

方式1:File file1 = new File("D:/java/home");

方式2:File file2 = new File("D:/java","home");

方式3:File javaDir= new File("D:java");

          File file3 = new File(javaDir,"test.txt");

方式4:URI uri = new URI("file:/D:/java/home");(注意格式是"file:/D:/java/home")

          File file2 = new File(uri);

3.方法createNewFile() :建立已有目錄下面的檔案.比如:可以已存在目錄D:/java目錄下面建立test.txt,如java目錄不存在,建立不了檔案test.txt.

方式1:File java = new File("D:/java");   

          File file1 = new File(java,"test.txt");

方式2:File file2 = new File("D:/java","test.txt");

方式3:File file3 = new File("D:/java/test.txt");

方式4:URI uri = new URI("file:/D:/java/test.txt");(注意格式是"file:/D:/java/home")

          File file = new File(uri);

二.刪除檔案.

方法delete(),需要注意的是delete()方法不能直接刪除非空資料夾,需要先刪除所有目錄下面所有檔案.

File案例

public class FileDemo {
  public static void main(String[] args) throws IOException, URISyntaxException {
    //testCreateDirectory();
    //testCreateFile();
    //testOtherMethod();
    File file = new File("D:/java");
    //testAllFileDelete(file);
  }
  /**
   * 遞迴呼叫刪除所有檔案
   */
  private static void testAllFileDelete(File file) {
    if(file==null||!file.exists()) return;
    if(file.isDirectory()) {
      File[] listFiles = file.listFiles();
      for(File delFile :listFiles) {
        testAllFileDelete(delFile);
      }
    }
    file.delete(); 
  }
  private static void testOtherMethod() {
    File file = new File("D:/java/test.txt");
    System.out.println("檔案是否存在file.exists-----"+file.exists());
    System.out.println("檔案絕對路徑file.getgetAbsolutePath()------"+file.getAbsolutePath());
    System.out.println("檔名file.getName()-----"+file.getName());
    System.out.println("file.getParentFile()------"+file.getParentFile());
    System.out.println("父級目錄路徑名file.getParent()-----"+file.getParent());
    System.out.println("uri的路徑file.toURI()------"+file.toURI());
    System.out.println("最後修改時間file.getLastModified()-----"+file.lastModified());
    System.out.println("路徑名轉化成字串file.getPath()-----"+file.getPath());
    File testFile = new File("D:/java");
    File[] listFiles = testFile.listFiles();
    for(File list : listFiles) {
      System.out.println("檔名:"+list.getName()+""+"----是否目錄:"+list.isDirectory()+"----是否檔案:"+list.isFile()+"-----絕對路徑:"+list.getAbsolutePath());
    }
  }
  /**
   * 建立檔案,前提是要在已有的目錄下面
   */
  private static void testCreateFile() throws IOException, URISyntaxException {
    //******createNewFile()*********
    //在已有目錄D:/java下面建立檔案test.txt.
    File javaDir = new File("D:/java");//先建立D:/java目錄.
    javaDir.mkdir();
    //方式1:
    File file1 = new File("D:/java/test.txt");
    file1.createNewFile();
    //方式2:
    File file2 = new File("D:/java","test.txt");
    file2.createNewFile();
    //方式3:
    File javaFile = new File("D:/java");
    File File3 = new File(javaFile,"test.txt");
    File3.createNewFile();
    //方式4:
    URI uri = new URI("file:/D:/java/home");
    File file4 = new File(uri);
    file4.createNewFile();
  }
  
  /**
   * 建立目錄方法共兩類:
   * 1.mkdir()方法,要求父級的目錄必須是存在的
   * 2.mkdirs()方法,父級目錄可以不存在
   */
  private static void testCreateDirectory() throws URISyntaxException {
    //*******mkdir()********
    //1.在已有D:/java目錄下面建立home目錄
    File javaDir = new File("D:/java");
    javaDir.mkdir(); //建立D:/java,使得D盤根目錄下面java目錄已存在.
    //方式1:
    File file1 = new File("D:/java/home");
    file1.mkdir();
    //方式2:
    File file2 = new File("D:/java","home");
    file2.mkdir();
    //方式3:
    URI uri = new URI("file:/D:/java/home");
    File file3 = new File(uri);
    file3.mkdir();
    
    //******mkDirs()********
    //2.父級別目錄不存在,即D:/java目錄不存在,建立多級目錄,D:/java/home.
    //方式1:
    File dirsFile1 = new File("D:/java/home");
    dirsFile1.mkdirs();
    //方式2:
    File dirsFile2 = new File("D:/java","home");
    dirsFile2.mkdirs();
    //方式3:
    URI dirsUri = new URI("file:/D:/java/home");
    File dirsFile3 = new File(dirsUri);
    dirsFile3.mkdirs();
    //方法4:
    File javaDir1 = new File("D:/java");
    File file4 = new File(javaDir1,"home");
    file4.mkdirs();
  }
}

testOtherMethod方法執行結果:

檔案是否存在file.exists-----true
檔案絕對路徑file.getgetAbsolutePath()------D:\java\test.txt
檔名file.getName()-----test.txt
file.getParentFile()------D:\java
父級目錄路徑名file.getParent()-----D:\java
uri的路徑file.toURI()------file:/D:/java/test.txt
最後修改時間file.getLastModified()-----1536546025013
路徑名轉化成字串file.getPath()-----D:\java\test.txt
檔名:test.txt----是否目錄:false----是否檔案:true-----絕對路徑:D:\java\test.txt