java基礎之十六->IO

1、File類

image.png
image.png

什麼是文件:文件能夠認爲是相關記錄或放在一塊兒的數據的集合
文件通常存在哪裏:硬盤、光盤等等
File提供了對當前文件系統中文件的部分操做

示例

package com.msbline.basic.io;
import java.io.File;
import java.io.IOException;
public class FileDemo {
    public static void main(String[] args) {
        File file = new File("src/abc.txt");
        try {
            file.createNewFile();
            //判斷文件的屬性
            file.canExecute();
            file.canRead();
            file.canWrite();
            System.out.println(file.exists());
            //獲取文件的名稱
            System.out.println(file.getName());
            //獲取絕對路徑
            System.out.println(file.getAbsolutePath());
            //獲取文件的父文件名稱,若是文件的路徑中只包含文件名稱,則顯示空
            System.out.println(file.getParent());
            //返回文件絕對路徑的規範
            System.out.println(file.getCanonicalPath());
            //返回操做系統的文件分隔符
            System.out.println(File.separator);
            System.out.println("-----------------------------");
            File file1 = new File("D:/");
            //不管當前文件是否存在,只要給定具體的路徑,均可以返回相應的路徑名稱
            System.out.println(file1.getAbsolutePath());
            System.out.println(file1.isDirectory());
            System.out.println(file1.isFile());
            String[] list = file1.list();
            for(String str : list){
                System.out.println(str);
            }
            System.out.println("------------------");
            File[] files = file1.listFiles();
            for(File file2 : files){
                System.out.println(file2);
            }
            System.out.println("------------------");
            File[] files1 = File.listRoots();
            for(File file2 : files1){
                System.out.println(file2);
            }
            System.out.println("------------------");
            File file2 = new File("F:/a/b/c");
            file2.mkdir();
            file2.mkdirs();
            File file3 = new File("F:/");
            File[] files2 = file3.listFiles();
            printFileName(files2);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void printFileName(File[] files){
        if(files != null){
            for(File file : files){
                if(file.isDirectory()){
                    printFileName(file.listFiles());
                }else {
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
}

2、IO流的原理及概念

流的基本概念

image.png
image.png
image.png

流表示從一個文件將數據發送到另外一個文件,包含一個流向的問題,最終須要選擇一個參照物,當前程序做爲參照物java

從一個文件中讀取數據到程序中叫作輸入流
從程序輸出數據到另外一個文件叫作輸出流

3、IO流的分類

image.png
image.png
image.png

一、處理流和節點流

image.png

處理流示例
package com.msbline.basic.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputStreamReaderDemo {
    public static void main(String[] args) {
        File file = new File("src/abc.txt");
        FileInputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        try{
            inputStream = new FileInputStream(file);
            inputStreamReader = new InputStreamReader(inputStream);
            char[] chars = new char[1024];
            int length = inputStreamReader.read(chars);
            System.out.println(new String(chars,0,length));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                inputStreamReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
package com.msbline.basic.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutputStreamWriterDemo {
    public static void main(String[] args) {
        File file = new File("src/abc.txt");
        OutputStreamWriter outputStreamWriter = null;
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(file);
            outputStreamWriter = new OutputStreamWriter(fileOutputStream);
            outputStreamWriter.write(99);
            outputStreamWriter.write("馬士兵教育");
            outputStreamWriter.write("abcdefg",0,5);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //處理流的關閉順序,通常按照建立的順序的逆序來關閉
 try {
                outputStreamWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

二、字節流和字符流

全部文件的儲存是都是字節(byte)的儲存,在磁盤上保留的並非文件的字符而是先把字符編碼成字節,再儲存這些字節到磁盤。在讀取文件(特別是文本文件)時,也是一個字節一個字節地讀取以造成字節序列
字節流可用於任何類型的對象,包括二進制對象,而字符流只能處理字符或者字符串;
字節流提供了處理任何類型的IO操做的功能,但它不能直接處理Unicode字符,而字符流就能夠
字節流是最基本的,全部的InputStrem和OutputStream的子類都是,主要用在處理二進制數據,它是按字節來處理的
但實際中不少的數據是文本,
又提出了字符流的概念,
它是按虛擬機的encode來處理,也就是要進行字符集的轉化
這兩個之間經過 InputStreamReader,OutputStreamWriter來關聯,
其實是經過byte[]和String來關聯
在實際開發中出現的漢字問題實際上都是在字符流和字節流之間轉化不統一而形成的編碼

示例

InputStream
package com.msbline.basic.io;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class StreamDemo1 {
    public static void main(String[] args) throws IOException {
        InputStream inputStream = null;
        try {
            //添加緩衝區的方式進行讀取,每次會將數據添加到緩衝區中,
 //當緩衝區滿了以後,一次讀取,而不是每次讀取一個字節
 inputStream = new FileInputStream("src/abc.txt");
            byte[] bytes = new byte[1024];
            int length = 0;
            while ((length = inputStream.read(bytes))!=-1){
                System.out.println(new String(bytes,0,length));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            inputStream.close();
        }
    }
}
OutputStream
package com.msbline.basic.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("src/aaa.txt");
        OutputStream outputStream = null;
        try{
            outputStream  = new FileOutputStream(file);
            outputStream.write(99);
            outputStream.write("rnmashibing".getBytes());
            outputStream.write(1);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            outputStream.close();
        }
    }
}
Reader
package com.msbline.basic.io;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class ReaderDemo {
    public static void main(String[] args) {
        Reader fileReader = null;
        try {
            fileReader = new FileReader("src/abc.txt");
            int read = fileReader.read();
            System.out.println((char)read);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
writer
package com.msbline.basic.io;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class WriterDemo {
    public static void main(String[] args) {
        File file = new File("src/writer.txt");
        Writer writer = null;
        try{
            writer = new FileWriter(file);
            writer.write("www.mashibing.com");
            writer.write("馬士兵教育");
            writer.flush();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

4、IO流類的體系

image.png
image.png
image.png
image.png

相關文章
相關標籤/搜索