IO基本知識及測試代碼

基本

概念

流:流動、流向 從一段移動到另一端 源頭與目的地

程序 與 文件|數組|網絡連接|數據庫 ,以程序爲中心

IO流分類

流向:輸入流和輸出流

數據:字節流:二進制,可以包含一切文件,包括純文本、doc、音頻、視頻等等

​ 字符流:文本文件,只能處理純文本

功能:節點:包括源頭

​ 處理:增強功能,提供性能

字符流與字節流 與 文件

字節流

//輸入流
InputStream 
read(byte[] b)
read(byte[] b,int off,int len)  +  close()
FileInputStream()

// 輸出流
OutputStream 
write(byte[] b)
write(byte[] b,int off,int len)  +  flush()  +  close()
FileOutputStream

字符流

//輸入流
Reader 
read(char[] cbuf)
read(char[] cbuf,int off,int len)  +  close()
FileReader()

//輸出流
Writer 
write(charp[] cbuf)
write(char[] cbuf,int off,int len)  +  flush()  +  close()
write(String str,int off,int len)  +  flush()  +  close()
FileWriter()

兩個常量

1、路徑分隔符
2、文件分隔符

package com.iotest.file;

import java.io.File;

/**
 * 兩個常亮
 * 1、路徑分隔符
 * 2、文件分隔符
 */
public class Demo01 {

    public static void main(String[] args) {
        System.out.println(File.pathSeparator);
        System.out.println(File.separator);
        // 路徑表現形式
        String path = "D:\\REMEM\\lv1111.png";
        path = "D:"+File.separator+"REMEN"+File.separator+"lv1111.png";
        // 推薦方式
        path = "D:/REMEN/lv1111.png";

    }
}

相對路徑與絕對路徑構造File對象

package com.iotest.file;

import java.io.File;

/**
 * 相對路徑與絕對路徑構造File對象
 */
public class Demo02 {
    /**
     *
     */
    public static void main(String[] args) {
        String parentPath = "D:/REMEN";
        String name = "test.png";
        // 相對路徑
        File src = new File(parentPath, name);
        src = new File(new File(parentPath), name);
        // out
        System.out.println(src.getName());
        System.out.println(src.getPath());


        // 絕對路徑
        src = new File("D:/REMEN/test.png");
        // out
        System.out.println(src.getName());
        System.out.println(src.getPath());

        // 沒有盤符 以user.dir構建
        src = new File("text.png");
        System.out.println(src.getName());
        System.out.println(src.getPath());
        System.out.println(src.getAbsolutePath());


    }
}

常用方法

1、文件名

  • getName() 文件名、路徑名
  • getPath() 路徑名
  • getAbsoluteFile() 以絕對路徑所對應的File對象
  • getAbsolutePath() 絕對路徑名
  • getParent() 父目錄,相對路徑的父目錄,可能爲null,入,刪除本身後的結果

2、判斷信息

  • exists() 是否存在
  • canWrite() 文件是否可以寫
  • isFile() 是否文件
  • isDirectory() 是否文件夾,沒有真實存在的,默認是文件夾
  • isAbsolute() 消除平臺差異,以盤符開頭,其他以/開頭

3、長度

  • length() 字節數,單位爲字節。不能讀取文件夾的長處

4、創建和刪除文件

  • createNewFile() 不存在創建新文件,con系統關鍵字無法創建
  • delete() 刪除文件
  • static createTempFile(前綴3個字節長,後綴默認.temp) 默認臨時空間
  • static createTempFIle(前綴3個人字節長,後綴默認.,temp,目錄)
  • deleteOnExit() 退出虛擬機刪除,常用語刪除臨時文件。
package com.iotest.file;

import java.io.File;
import java.io.IOException;

/**
 * 常用方法
 * 1、文件名
 * getName() 文件名、路徑名
 * getPath() 路徑名
 * getAbsoluteFile() 以絕對路徑所對應的File對象
 * getAbsolutePath() 絕對路徑名
 * getParent() 父目錄,相對路徑的父目錄,可能爲null,入,刪除本身後的結果
 * 2、判斷信息
 * exists() 是否存在
 * canWrite() 文件是否可以寫
 * isFile() 是否文件
 * isDirectory() 是否文件夾,沒有真實存在的,默認是文件夾
 * isAbsolute() 消除平臺差異,以盤符開頭,其他以/開頭
 * 3、長度
 * length() 字節數,單位爲字節。不能讀取文件夾的長處
 * 4、創建和刪除文件
 * createNewFile() 不存在創建新文件,con系統關鍵字無法創建
 * delete() 刪除文件
 * static createTempFile(前綴3個字節長,後綴默認.temp)  默認臨時空間
 * static createTempFIle(前綴3個人字節長,後綴默認.,temp,目錄)
 * deleteOnExit() 退出虛擬機刪除,常用語刪除臨時文件。
 */
public class Demo03 {

    public static void main(String[] args) {
        test3();
        //test1();

    }

    public static void test1() {
        // 建立聯繫
        File src = new File("2t.txt");
        //File src = new File("D:/REMEN/test.png");
        System.out.println(src.getName()); // 返回名稱
        System.out.println(src.getPath()); // 如果是絕對路徑,返回完成路徑,否則相對路徑
        System.out.println(src.getAbsolutePath()); // 返回絕對路徑
        System.out.println(src.getParent()); // 返回上一級目錄,可能爲null
    }

    public static void test2() {
        String path = "D:/Code/Java/IO/src/main/resources/test.png";
        File src = new File(path);
        System.out.println("是否存在" + src.exists());
        System.out.println("是否可寫" + src.canWrite());
        if (src.isFile()) {
            System.out.println("文件");
        } else {
            System.out.println("文件夾");
        }
        System.out.println("是否是絕對路徑" + src.isAbsolute());

        System.out.println("長度" + src.length());
    }

    public static void test3() {
        String path = "D:/Code/Java/IO/src/main/resources/200.png";
        File src = new File(path);
        if (!src.exists()) {
            boolean flag = false;
            try {
                flag = src.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("create file fail");
            }
            System.out.println(flag ? "success" : "fail");
        }
        boolean flag = src.delete();
        System.out.println(flag ? "delete success" : "d false");

        try {
            File temp = File.createTempFile("tes", ".temp", new File("D:/Code/Java/IO/src/main/resources"));
            try {
                // 2s後刪除
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 退出即刪除
            temp.deleteOnExit();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5、操作目錄

  • mkdir() 創建目錄 必須確保父目錄存在 如果不存在則創建失敗
  • mkdirs() 創建目錄 如果父目錄不存在 一同創建
  • list() 子目錄-文件名 字符串形式
  • listFiles() 子目錄-文件file對象 file形式;後可以加filter過濾器
  • static listRoots() 根路徑
package com.iotest.file;

import java.io.File;
import java.io.FileFilter;

/**
 * 5、操作目錄
 *  mkdir() 創建目錄 必須確保父目錄存在 如果不存在則創建失敗
 *  mkdirs() 創建目錄 如果父目錄不存在 一同創建
 *  list() 子目錄-文件名 字符串形式
 *  listFiles() 子目錄-文件file對象 file形式;後可以加filter過濾器
 *  static listRoots() 根路徑
 *
 */
public class Demo04 {

    public static void main(String[] args) {
        test1();
        test2();
    }
    public static void test1() {
        String path = "D:/Code/Java/IO/src/main/resources/testfile/test";
        File src = new File(path);
        //src.mkdir();
        src.mkdirs();
    }
    public static void test2(){

        String path = "D:/Code/Java/IO/src/main/resources";
        File src = new File(path);
        System.out.println("=========子目錄-文件名=========");
        if (src.isDirectory()){
            String[] subNames = src.list();
            for (String temp:subNames){
                System.out.println(temp);
            }
        }
        System.out.println("=========子目錄-文件File對象=========");
        if (src.isDirectory()){
            File[] subFiles = src.listFiles();
            for (File temp:subFiles){
                System.out.println(temp.getAbsolutePath());
            }
        }
        System.out.println("=========子目錄-.java對象=========");
        if (src.isDirectory()){
            File[] subFiles = src.listFiles(new FileFilter() {
                public boolean accept(File pathname) {
                    return pathname.isFile() && pathname.getName().endsWith(".java");
                }
            });
            for (File temp:subFiles){
                System.out.println(temp.getAbsolutePath());
            }
        }
    }
}

輸出子孫級目錄-文件的名稱

package com.iotest.file;

import java.io.File;
import java.util.Arrays;

/**
 * 輸出子孫級目錄-文件的名稱
 * 1、listFiles()
 * 2、遞歸
 */
public class Demo05 {
    public static void main(String[] args) {
        String path = "D:/Code/Java/IO/src/main/resources";
        File parent = new File(path);
        //printName(parent);

        File[] roots = File.listRoots();
        System.out.println(Arrays.toString(roots));

    }

    public static void printName(File src) {
        if (null == src || !src.exists()){
            return;
        }
        System.out.println(src.getAbsolutePath());
        if (src.isDirectory()) {
            for (File sub:src.listFiles()){
                printName(sub);
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章