文章目錄
- 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,并輸入如下内容:
讀取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實作了檔案流的輸出。