1. 程式人生 > >java i/o系統

java i/o系統

輸入/輸出(input/output)是指對某個物理或邏輯裝置或某種環境進行資料的輸入和輸出。

  • File類

不同作業系統的路徑名稱表示是有差別的,如在windows中,一個可能的路徑名為“E:\JSP\bin”,而Linux下的路徑名可能為“/home/JSP/bin”。windows的路徑使用UNC(Universal Naming Convention)路徑名,以“\”開始的目錄表示上下文環境所在目錄的硬碟跟目錄。如果沒有以“\”作為路徑的開始,則表示相對於當前工作目錄的路徑,並且通過“碟符(C/D/E):”形式表示硬碟指定。而Linux系統沒有windows系統硬碟驅動器的概念,它的路徑以“/”開始,表示從根目錄開始的絕對路徑,不以“/”開始的路徑是相對於當前路徑的相對路徑。
注意:在java中,無論是檔案還是目錄,都是用File類的例項表示。

1、檔案或目錄的生成

File類的建構函式
public File(String path)

如果path是實際存在的路徑,則該File物件表示的是目錄;如果path是檔名,則該File物件表示的是檔案。

File類的建構函式
public File(String path,String name)

path是路徑名,name是檔名。

File類的建構函式
public File(File dir,String name)

dir是路徑名,name是檔名。

2、檔名的處理

//得到一個檔案的名稱(不包括路徑)
String getName()
//得到一個檔案的路徑名
String getPath()
//得到一個檔案的絕對路徑名
String getAbsolutePath()
//得到一個檔案的上一級目錄名
String getParent()
//將當前檔名更名為給定檔案的完成路徑
String renameTo(File newName)

3、檔案屬性測試

//測試當前File物件所指示的檔案是否存在
boolean exists()
//測試當前檔案是否可寫
boolean canWrite()
//測試當前檔案是否可讀
boolean canRead()
//測試當前檔案是否是檔案(不是目錄)
boolean isFile()
//測試當前檔案是否是目錄
boolean isDirectory()

4、普通檔案資訊和工具

//得到檔案最近一次修改的時間
long lastModified()
//得到檔案的長度,以位元組為單位
long length()
//刪除當前檔案
boolean delete()

5、目錄操作

//根據當前物件生成一個由該物件指定的路徑
boolean mkdir()
//列出當前目錄下的檔案
String list()

6、應用

import com.sun.org.apache.xpath.internal.SourceTree;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.logging.LogRecord;

/**
 * @ 描 述 : 檔案操作
 * @ 作 者 : 一念〃
 * @ 時 間 : 10:40 2018/11/18
 * @ 備 注 :
 */
public class FileTest {
    public void readFileList(File file, Filter filter){
        //判斷file是否為目錄
        if(file.isDirectory()){
            //列出所有的檔案及目錄
            File[] files = file.listFiles();//建立目錄陣列
            //通過陣列建立陣列列表
            ArrayList<File> fileArrayList = new ArrayList<File>();
            //for迴圈變數陣列
            for (int i = 0;i<files.length;i++){
                //先列出目錄
                if(files[i].isDirectory()){//判斷是否為目錄
                    //輸出路徑名
                    System.out.println("["+files[i].getPath()+"]");
                    readFileList(files[i],filter);//遞迴呼叫readFileList方法
                }else{
                    //檔案先存入fileList,待會再列出
                    fileArrayList.add(files[i]);
                }
            }
            //列出檔案
            for (File f : fileArrayList){
                readFileList(f,filter);//呼叫readFileList方法
                System.out.println();//換行
            }
        }else if(file.isFile()){
            //當file為檔案時
            fileDesc(file);//呼叫fileDesc方法
        }
    }

    public void fileDesc(File file){
        if(file.isFile()){
            //判斷是否為檔案
            System.out.println(file.toString()+"\n該檔案");//輸出字串資訊
            System.out.println(file.canRead()?"可讀":"不可讀");//判斷檔案是否可讀
            System.out.println(file.canWrite()?"可寫":"不可寫");//判斷檔案是否可寫
            System.out.println(file.length()+"位元組");//輸出位元組數
        }
    }

    public static void main(String[] args) {
        String filename = "E:\\JAVA";//給一個路徑
        File file = new File(filename);//建立並初始化由檔名決定的檔案物件

        Filter filter = new Filter("java");//建立並初始化檔案過濾器
        //建立例項,呼叫readFileList方法
        new FileTest().readFileList(file,filter);
        }
}
class Filter implements FilenameFilter{

    String extent;

    //宣告實現Filter類的構造
    Filter(String extent){
        this.extent = extent;
    }

    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith("."+extent);//返回檔案字尾
    }
}