天天看點

Java輸入輸出流1.什麼是輸入和輸出(I / O)2.什麼是流(Stream)3.File類4.InputStream和OutputStream 抽象類5.小結

文章目錄

  • 1.什麼是輸入和輸出(I / O)
    • 1.1 基本概念
    • 1.2 最簡單的輸入輸出流
    • 1.3 從鍵盤輸入
  • 2.什麼是流(Stream)
  • 3.File類
    • 3.1 執行個體化
    • 3.2 絕對路徑和相對路徑
  • 4.InputStream和OutputStream 抽象類
    • 4.1 FileInputStream從檔案流中讀取資料
    • 4.2 FileOutputStream向檔案流中寫入資料
  • 5.小結

1.什麼是輸入和輸出(I / O)

1.1 基本概念

輸入/輸出這個概念,對于計算機相關專業的同學并不陌生,在計算中,輸入/輸出(Input / Output,縮寫為 I / O)是資訊處理系統(例如計算機))與外界(可能是人類或其他資訊處理系統)之間的通信。輸入是系統接收的信号或資料,輸出是從系統發送的信号或資料。

1.2 最簡單的輸入輸出流

一直以來,我們都在向螢幕輸出内容以驗證我們編寫的代碼邏輯。向螢幕輸出内容非常簡單,可以由以下兩種方式來完成:

// 列印 Hello World,不換行
System.out.print("Hello World");

// 列印 Hello Java,并換行
System.out.println("Hello Java");
           

1.3 從鍵盤輸入

java.util包下的Scanner類可用于擷取使用者從鍵盤輸入的内容,我們在Java Scanner 類這一小節已經介紹過具體使用,執行個體如下:

import java.util.Scanner;

/**
 * @author [email protected]
 */
public class ScannerDemo {
    public static void main(String[] args) {
        // 建立掃描器對象
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入您的姓名:");
        // 可以将使用者輸入的内容掃描為字元串
        String name = scanner.nextLine();
        // 列印輸出
        System.out.println("你好 ,".concat(name).concat(" 。"));
        // 關閉掃描器
        scanner.close();
    }
}
           

2.什麼是流(Stream)

Java 中最基本的輸入/輸入是使用流來完成的。

流是代表資料源和資料目标的對象,怎麼了解這句話呢?簡單來說,可以讀取作為資料源的流,也可以寫入作為資料目标的流。Java中的流是長度不确定的有序位元組序列,它是一連串流動的字元,是以先進先出的方式發送資訊的通道。

3.File類

3.1 執行個體化

要執行個體化File對象,需要傳入一個檔案或目錄的路徑。

File 類提供了如下 4 個構造方法:

一. File(File parent, String child):從父抽象路徑名和子路徑名字元串建立新的檔案執行個體;

二. File(String pathName):通過将給定的路徑名字元串轉換為抽象路徑名,建立一個新的檔案執行個體(最常用);

三. File(String parent, String child):從父路徑名字元串和子路徑名字元串建立新的檔案執行個體;

四. File(URI uri):通過将給定的檔案: URI轉換為抽象路徑名,建立一個新的檔案執行個體。

3.2 絕對路徑和相對路徑

在執行個體化File對象時,既可以傳入絕對路徑,也可以傳入相對路徑。

絕對路徑是以根目錄開頭的完整的全路徑,上面代碼執行個體中傳入的是絕對路徑,我們再來看看什麼是相對路徑,以及如何傳入相對路徑。

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

public class FileDemo2 {
   public static void main(String[] args) throws IOException {
       // 傳入目錄相對路徑
       File dir = new File(".\\images");
       File imoocDir = new File("..\\demo");
       // 傳入檔案相對路徑
       File file = new File(".\\Hello.java");
   }
}
           

上面代碼的File構造方法中傳入的就是相對路徑,代碼中的.表示目前目錄,…表示上級目錄。

File 對象下有 3 個表示路徑的執行個體方法:

一. String getPath():将抽象路徑名轉換為路徑名字元串;

二. String getAbsolute():傳回此抽象路徑名的絕對路徑名字元串;

三. String getCanonicalPath():傳回此抽象路徑名的規範路徑名字元串。

4.InputStream和OutputStream 抽象類

OutPutStream抽象類是與InputStream對應的最基本的輸出流,它是所有輸出流的父類。

4.1 FileInputStream從檔案流中讀取資料

FileInputStream就是從檔案流中讀取資料,我建立一個文本文檔Hello.txt,并輸入如下内容:

Java輸入輸出流1.什麼是輸入和輸出(I / O)2.什麼是流(Stream)3.File類4.InputStream和OutputStream 抽象類5.小結

讀取Hello.txt檔案中資料的執行個體代碼如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo1 {

    public static void main(String[] args) throws IOException {
        // 執行個體化檔案流
        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Luss\\TestJa\\Hello.txt");
        for (;;) {
            int n = fileInputStream.read();
            if (n == -1) {
                // read() 方法傳回-1 則跳出循環
                break;
            }
            // 将n強制轉換為 char 類型
            System.out.print((char) n);
        }
        // 關閉檔案流
        fileInputStream.close();
    }
}
           

如果我們打開了一個檔案并進行操作,不要忘記使用close()方法來及時關閉。這樣可以讓系統釋放資源。

4.2 FileOutputStream向檔案流中寫入資料

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Luss\\TestJa\\Hello.txt");
        // 寫入 3 個H字元
        fileOutputStream.write(72);
        fileOutputStream.write(72);
        fileOutputStream.write(72);
        fileOutputStream.close();
    }
}
           

運作代碼後,Hello.txt後面成功寫入了 3 個字元H。

5.小結

輸入輸出流經常用于上傳檔案到伺服器的場景,要學會使用java.io.File類,InputStream和OutputStream分别是所有輸入流和所有輸出流的父類,

FileInputStream實作了檔案流的輸入,FileOutputStream實作了檔案流的輸出。