JavaIO 總結筆記<二> IO簡介和File文件

個人博客個人簡書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結構圖:

結構圖

一、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]);
        }
    }

}


項目地址:傳送門

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容