Java IO流(上)

IO流的基本介紹,輸出文件屬性:

import java.io.File;

public class Application {

    public static void main(String[] args) {
        // 通過IO流 把程序中的數據保存到硬盤上 以及讀取硬盤上的數據到程序內。
        //IO = Input(從硬盤讀取數據到程序) 和 Output(把程序數據保存到硬盤)
        //流:在程序和硬盤之間搭建一個管道,用來傳輸數據,
        //    體積比較大的數據,會被拆分爲許多很小的模塊,進行傳輸 ,叫做數據流

        //File 類 表示因硬盤上的一個文件
        //路徑分隔符使用 / 或者 \\
        File file = new File("S:/111.txt");

        //通過 get方法可以獲取文件的各種屬性,例如:
        System.out.println(file.lastModified());//最後一次修改時間
        System.out.println(file.getName());//文件名字
        System.out.println(file.getParentFile());//所在文件夾名稱
        System.out.println(file.getPath());//文件路徑

        //特殊的方法
        System.out.println("文件是否存在:" + file.exists());
        //文件 = 普通文件 + 文件夾(目錄)
        System.out.println("文件是否是目錄:" + file.isDirectory());

        //對於目錄來說
        File file2 = new File ("S:/");
        System.out.println("文件是否是目錄:" + file2.isDirectory());
        //獲取這個目錄中保存的所有文件
        File[] file2s = file2.listFiles();

        for (File file3 : file2s) {
            //輸出所有文件名
            //System.out.println("——" + file3.getName());
            if (file3.isDirectory()) {
                //輸出目錄名字
                System.out.println("——" + file3.getName());
            }
        }       
    }
}

小練習,輸出目錄中的子目錄中的文件(面試題):


import java.io.File;

public class Application2 {

    public static void main(String[] args) {

        // 寫一個方法 輸出某個目錄下的所有文件名字,包括子目錄中的文件名字
        File file = new File("S:/");

        //輸出d盤下所有文件路徑
        printFilePath(file);
    }
    //輸出指定目錄中,所有的文件路徑
    public static void printFilePath(File file) {
        //獲取當前目錄中的 所有文件
        File[] files = file.listFiles();
        //獲取每一個文件
        if (files != null) {
            for (File f : files) {

                if(f.isDirectory()) {
                    //如果是目錄,獲取目錄中的所有文件
                    printFilePath(f);//在方法內部調用方法自身的寫法叫遞歸

                }else {
                    //普通文件
                    System.out.println(f.getPath());
                }
            }
        }
    }
}

創建 目錄文件:


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

public class Application3 {

    public static void main(String[] args) {

        File f1 = new File("S:/222.txt"); //普通文件
        File f2 = new File("S:/333/444/555"); //目錄
        File f3 = new File("S:/666"); //目錄

        try {
            //創建普通文件
            f1.createNewFile();
        } catch (IOException e) {

            e.printStackTrace();
        }

        f2.mkdirs();//創建目錄 +s的可以創建333/444... 不+s 只能創建333 
        f3.mkdir();//不+s 只能創建666
    }
}

通過IO 流 進行數據的讀寫操作:

寫入:


import java.io.FileWriter;
import java.io.IOException;

public class Application4 {

    public static void main(String[] args) {

        //通過IO 流 進行數據的讀寫操作
        //IO 按照用途分爲: InputStream 和 OutputStream
        //IO 按照類型分爲: 字節流 和 字符流
        //字符流以字符(char = 2 byte)爲單位傳輸數據,用來讀取文本內容
        //字節流以字節(byte = 8位)爲單位傳輸數據 ,用來讀寫非文本內容(如 圖片,視頻)

        //字符流:Reader 和 Writer 兩個抽象類是所有字符流的輸入輸出的父類
        //比較常用的子類是 FileReader 和 FileWriter

        //向S:/111.txt 中寫入內容
        try {
            FileWriter fw = new FileWriter("S:/111.txt",true);//true 追加模式,不會覆蓋,默認覆蓋

            fw.write("\r\n");//換行
            fw.write("謝特");//寫入內容

            fw.close();//使用完關閉流
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

讀取:


import java.io.FileReader;
import java.io.IOException;

public class Application5 {

    public static void main(String[] args) {
        //讀取 S:/111.txt 中的文字

        try {
            FileReader fr = new FileReader("S:/111.txt");

//          只能讀取固定數目的字符
//          //裝載從文件中讀取到的字符
//          char[] chars = new char[50];
//          
//          //從文錢中讀取char.length 個字符,放入chars 中
//          fr.read(chars);
//          
//          //把讀取的字符從char[] 轉換爲字符串
//          String line = new String(chars);
//          System.out.println(line);
//          

            //通過循環 讀取所有的內容
            //裝在讀取內容讓那個的容器
            char[] chars = new char[1024];//常用大小是1024,效率高

            //記錄讀取到哪個字符
            int length = -10001010;//局部變量必須設置成默認值才能使用

            //length = fr.read(chars);返回值是這次讀取到了多少個字符
            //length != -1;         如果到了文章末尾沒有讀取到任何內容 返回-1
            //                       返回-1,說明所有內容都已經讀取完畢 

            //用來拼接每次讀取的內容
            StringBuffer sb = new StringBuffer();

            while((length = fr.read(chars)) != -1) {

                //把char[] 中 指定範圍的字符轉化爲字符串
                String line = new String(chars, 0,length);//捨棄後面多餘的讀數

                //把每次讀取的內容拼接在一起
                sb.append(line);
            }

            //StringBuffer轉 String
            String text = sb.toString();
            System.out.println(text);

            //關閉流
            fr.close();
        } catch (IOException e) { //修改成IO 導包
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章