天天看點

擷取input file絕對路徑_IO--File對象

在計算機系統中,檔案是非常重要的存儲方式。Java的标準庫

java.io

提供了

File

對象來操作檔案和目錄。

要構造一個

File

對象,需要傳入檔案路徑:

擷取input file絕對路徑_IO--File對象
import java.io.*;
           

Run

構造File對象時,既可以傳入絕對路徑,也可以傳入相對路徑。絕對路徑是以根目錄開頭的完整路徑,例如:

File f = new File("C:Windowsnotepad.exe");
           

注意Windows平台使用

作為路徑分隔符,在Java字元串中需要用

表示一個

。Linux平台使用

/

作為路徑分隔符:

File f = new File("/usr/bin/javac");
           

傳入相對路徑時,相對路徑前面加上目前目錄就是絕對路徑:

// 假設目前目錄是C:Docs
File f1 = new File("subjavac"); // 絕對路徑是C:Docssubjavac
File f3 = new File(".subjavac"); // 絕對路徑是C:Docssubjavac
File f3 = new File("..subjavac"); // 絕對路徑是C:subjavac
           

可以用

.

表示目前目錄,

..

表示上級目錄。

File對象有3種形式表示的路徑,一種是

getPath()

,傳回構造方法傳入的路徑,一種是

getAbsolutePath()

,傳回絕對路徑,一種是

getCanonicalPath

,它和絕對路徑類似,但是傳回的是規範路徑。

什麼是規範路徑?我們看以下代碼:

import java.io.*;
           

Run

絕對路徑可以表示成

C:WindowsSystem32..notepad.exe

,而規範路徑就是把

.

..

轉換成标準的絕對路徑後的路徑:

C:Windowsnotepad.exe

因為Windows和Linux的路徑分隔符不同,File對象有一個靜态變量用于表示目前平台的系統分隔符:

System.out.println(File.separator); // 根據目前平台列印""或"/"
           

檔案和目錄

File

對象既可以表示檔案,也可以表示目錄。特别要注意的是,構造一個

File

對象,即使傳入的檔案或目錄不存在,代碼也不會出錯,因為構造一個

File

對象,并不會導緻任何磁盤操作。隻有當我們調用

File

對象的某些方法的時候,才真正進行磁盤操作。

例如,調用

isFile()

,判斷該

File

對象是否是一個已存在的檔案,調用

isDirectory()

,判斷該

File

對象是否是一個已存在的目錄:

import java.io.*;
           

Run

File

對象擷取到一個檔案時,還可以進一步判斷檔案的權限和大小:

  • boolean canRead()

    :是否可讀;
  • boolean canWrite()

    :是否可寫;
  • boolean canExecute()

    :是否可執行;
  • long length()

    :檔案位元組大小。

對目錄而言,是否可執行表示能否列出它包含的檔案和子目錄。

建立和删除檔案

當File對象表示一個檔案時,可以通過

createNewFile()

建立一個新檔案,用

delete()

删除該檔案:

File file = new File("/path/to/file");
if (file.createNewFile()) {
    // 檔案建立成功:
    // TODO:
    if (file.delete()) {
        // 删除檔案成功:
    }
}
           

有些時候,程式需要讀寫一些臨時檔案,File對象提供了

createTempFile()

來建立一個臨時檔案,以及

deleteOnExit()

在JVM退出時自動删除該檔案。

import java.io.*;
           

Run

周遊檔案和目錄

當File對象表示一個目錄時,可以使用

list()

listFiles()

列出目錄下的檔案和子目錄名。

listFiles()

提供了一系列重載方法,可以過濾不想要的檔案和目錄:

import java.io.*;
           

Run

和檔案操作類似,File對象如果表示一個目錄,可以通過以下方法建立和删除目錄:

  • boolean mkdir()

    :建立目前File對象表示的目錄;
  • boolean mkdirs()

    :建立目前File對象表示的目錄,并在必要時将不存在的父目錄也建立出來;
  • boolean delete()

    :删除目前File對象表示的目錄,目前目錄必須為空才能删除成功。

Path

Java标準庫還提供了一個

Path

對象,它位于

java.nio.file

包。

Path

對象和

File

對象類似,但操作更加簡單:

import java.io.*;
import java.nio.file.*;
           

Run

如果需要對目錄進行複雜的拼接、周遊等操作,使用

Path

對象更友善。

練習

請利用

File

對象列出指定目錄下的所有子目錄和檔案,并按層次列印。

例如,輸出:

Documents/
  word/
    1.docx
    2.docx
    work/
      abc.doc
  ppt/
  other/
           

如果不指定參數,則使用目前目錄,如果指定參數,則使用指定目錄。

下載下傳練習:io-file (推薦使用IDE練習插件快速下載下傳)

小結

Java标準庫的

java.io.File

對象表示一個檔案或者目錄:

  • 建立

    File

    對象本身不涉及IO操作;
  • 可以擷取路徑/絕對路徑/規範路徑:

    getPath()

    /

    getAbsolutePath()

    /

    getCanonicalPath()

  • 可以擷取目錄的檔案和子目錄:

    list()

    /

    listFiles()

  • 可以建立或删除檔案和目錄。