JavaIO 總結筆記 IO簡介和File檔案

weixin_34037977發表於2017-06-30

個人部落格個人簡書gitHub主頁

簡介:

IO操作面臨很多問題,資訊量的巨大,網路的環境等等,因為IO不僅僅是對本地檔案、目錄的操作,有時對二進位制流、還有一部分是網路方面的資源,

所以多種原因直接造成IO操作無疑是耗時且複雜多變的。Java對IO的支援是個不斷的演變過程,經過了很多的優化,直到JDK1.4以後,才趨於穩定,

在JDK1.4中,加入了nio類,解決了很多效能問題,雖然我們有足夠的理由不去了解關於Java IO以前的情況,但是為了學好現在的類,

我們還是打算去研究下,通過掌握類的優化情況來徹底理解IO的機制!Java IO主要主要在java.io包下,分為四大塊近80個類:

  • 1基於位元組操作的I/O介面:InputStream和OutputStream

  • 2基於字元操作的I/O介面:Writer和Reader

  • 3基於磁碟操作的I/O介面:File

  • 4基於網路操作的I/O介面:Socket(不在java.io包下)

影響IO效能的無非就是兩大因素:資料的格式及儲存的方式,前兩類主要是資料格式方面的,後兩個類是儲存方式方面的:本地和網路。
所以策劃好這兩個方面的活動,有助於我們合理使用IO。

IO結構圖:

2761423-9cb6f6cd2e7e90b9
結構圖

一、java io的開始:

File檔案

  1. 我們主要講的是流,流的本質也是對檔案的處理,我們循序漸進一步一步從檔案講到到流去。

  2. java 處理檔案的類 File,java提供了十分詳細的檔案處理方法,這裡只列舉一些簡單的例子,其他的可以查API介面文件

package com.afinalstone.file;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by AFinalStone on 2017/6/27.
 */
public class F01_FileTest {

    //獲取系統的行分隔符,檔案分隔符
    private  String line = System.getProperty("line.separator");
    private  String separator_Path = System.getProperty("file.separator");

    /**
     * @throws IOException 檢測當前目錄是否存在檔案,不存在則建立
     */
    public static void createFile() throws IOException {

        File f = new File(IO01_FileTest);
        System.out.println(f);
        //public boolean exists()   判斷檔案是否存在
        if (f.exists()) {
            System.out.println("File Exists");
        } else {
            System.out.println("File No Exists");
//          public boolean createNewFile()  建立新檔案
//          public boolean mkdir()  根據路徑建立單級目錄
//          public boolean mkdirs() 根據路徑建立目錄且允許建立多級目錄
            f.createNewFile();
        }
    }

    /**
     * 獲得檔案最後一次修改時間
     */
    public static void getTimeOfLastModified() {
        File f = new File(IO01_FileTest);

        //public long lastModified()    檔案最後一次被修改的時間,UNIX時間
        long time = f.lastModified();
        System.out.println(time);

        Date d = new Date(time);
        System.out.println(d);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        System.out.println(sdf.format(d));
    }

    public static void operateFile() {

        File f = new File(IO01_FileTest);

        //public boolean canWrite() 檔案是否可寫
        System.out.println("canWrite: "+f.canWrite());

        //public long length()  返回檔案內容長度,單位位元組
        System.out.println("length: "+f.length());

        //public String getPath()   返回檔案的路徑資訊
        System.out.println("getPath: "+f.getPath());

        //public boolean isFile()   判斷給定的路徑是否是一個檔案
        System.out.println("isFile: "+f.isFile());

        //public boolean isDirectory()  判斷給定的路徑是否為目錄
        System.out.println("isDirectory: "+f.isDirectory());

        //public String getName()   獲得目錄的名字
        System.out.println("getName: "+f.getName());
        System.out.println("getPath: "+f.getPath());

        //public boolean renameTo(File dest)    重新命名檔案,路徑不同會新建
        //f.renameTo(new File("c:\\test\\b.txt"));

        //public boolean delete()   刪除檔案或者空目錄
//        f.delete();

    }

    public static void listFile(){

//      public File[] listFiles()   列出指定目錄的全部檔案和資料夾
        File fs=new File("src\\com\\afinalstone\\file");
        File[] temp=fs.listFiles();
        for (int i = 0; i < temp.length; i++) {
            System.out.println(temp[i]+"\t"+temp[i].length()+"\t"+temp[i].lastModified());
        }

//      public String[] list()  列出指定目錄的全部檔案或資料夾的名稱
        String[] s=fs.list();
        for (int i = 0; i < s.length; i++) {
            System.out.println(s[i]);
        }

        temp = fs.listFiles(new FileFilter(){//自定義一個過濾器類

            public boolean accept(File f) {   //.java
                //1.
                if(f.isFile())
                {
                    //2.
                    String name=f.getName();
                    //System.out.println(name);
                    //3.
                    if(name.endsWith(".java"))
                        return true;
                    else {
                        return false;
                    }
                }
                else {
                    return false;
                }
            }});
        for (int i = 0; i < temp.length; i++) {
            System.out.println(temp[i]);
        }
    }

}


專案地址:傳送門

相關文章