IO概述 當我們在生活中把電腦上的數據拷貝到U盤或者硬碟上時,就是進行數據傳輸,按照數據的流動方向,我們分為輸入(input)和輸出(output),即就是所謂IO流 Java中I/O操作主要是指使用 java.io 包下的內容,進行輸入、輸出操作。輸入也叫做讀取數據,輸出也叫做作寫出數據 IO的分 ...
IO概述
當我們在生活中把電腦上的數據拷貝到U盤或者硬碟上時,就是進行數據傳輸,按照數據的流動方向,我們分為輸入(input)和輸出(output),即就是所謂IO流
Java中I/O操作主要是指使用 java.io 包下的內容,進行輸入、輸出操作。輸入也叫做讀取數據,輸出也叫做作寫出數據
IO的分類
1.根據數據流向:
1.輸入流:把數據從其他設備上讀取到記憶體中的流。(硬碟--->>記憶體)
2.輸出流:把數據從記憶體中寫出到其他設備上的流。(記憶體--->>硬碟)
2.根據數據類型:
1.位元組流:以位元組為單位,讀寫數據的流
2.字元流:以字元為單位,讀寫數據的流
位元組流
一切文件皆為位元組,當我們在進行文本、圖片、視頻等傳輸時,都是以位元組來傳輸的。
位元組輸出流【OutputStream】
java.io.OutputStream 抽象類是表示位元組輸出流的所有類的超類,將指定的位元組信息寫出到目的地。它定義了位元組輸出流的基本共性功能方法。
1.public void close() :關閉此輸出流並釋放與此流相關聯的任何系統資源。
2.public void flush() :刷新此輸出流並強制任何緩衝的輸出位元組被寫出。
3.public void write(byte[] b) :將 b.length位元組從指定的位元組數組寫入此輸出流。
4.public void write(byte[] b, int off, int len) :從指定的位元組數組寫入 len位元組,從偏移量off開始輸 出到此輸出流。
5.public abstract void write(int b) :將指定的位元組輸出流
備註:close方法,當完成流的操作時,必須調用此方法,釋放系統資源
FileOutputStream類
java.io.FileOutputStream 類是文件輸出流,用於將數據寫出到文件。
構造方法
1.public FileOutputStream(File file) :創建文件輸出流以寫入由指定的File對象表示的文件。
2.public FileOutputStream(String name) : 創建文件輸出流以指定的名稱寫入文件。
1 package demosummary.io;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.FileOutputStream;
6
7 /**
8 * 1.public FileOutputStream(File file) :創建文件輸出流以寫入由指定的File對象表示的文件。
9 *
10 * 2.public FileOutputStream(String name) : 創建文件輸出流以指定的名稱寫入文件。
11 */
12 public class IOFos {
13 public static void main(String[] args) throws FileNotFoundException {
14 //1.public FileOutputStream(File file) :創建文件輸出流以寫入由指定的File對象表示的文件。
15 File file = new File("./src/demosummary/io/tmp/a.txt");
16 FileOutputStream fos = new FileOutputStream(file);
17 System.out.println(fos);
18 //2.public FileOutputStream(String name) : 創建文件輸出流以指定的名稱寫入文件。
19 FileOutputStream fos1 = new FileOutputStream("./src/demosummary/io/tmp/b.txt");
20 System.out.println(fos1);
21 }
22 }
寫出位元組數據
1.寫出位元組: write(int b) 方法,每次可以寫出一個位元組數據
1 package demosummary.io;
2
3 import java.io.FileOutputStream;
4 import java.io.IOException;
5
6 public class FosWrite {
7 public static void main(String[] args) throws IOException {
8 //創建FileOutputStream對象
9 FileOutputStream fos = new FileOutputStream("./src/demosummary/io/tmp/a.txt");
10 //寫出數據到a.txt文件中
11 fos.write(97);
12 fos.write(98);
13 fos.write(99);
14 //釋放資源
15 fos.close();
16 }
17 }
備註:
1. 雖然參數為int類型四個位元組,但是只會保留一個位元組的信息寫出。
2. 流操作完畢後,必須釋放系統資源,調用close方法,千萬記得。
2.寫出位元組數組: write(byte[] b) ,每次可以寫出數組中的數據
1 package demosummary.io;
2
3 import java.io.FileOutputStream;
4 import java.io.IOException;
5
6 public class FosWrite2 {
7 public static void main(String[] args) throws IOException {
8 //創建FileOutputStream對象
9 FileOutputStream fos = new FileOutputStream("./src/demosummary/io/tmp/c.txt");
10 //將字元串轉換成位元組數組
11 byte[] bytes = "java程式員".getBytes();
12 //寫出位元組數組到c.txt文件中
13 fos.write(bytes);
14 //釋放資源
15 fos.close();
16 }
17 }
3. 寫出指定長度位元組數組: write(byte[] b, int off, int len) ,每次寫出從off索引開始,len個位元組
1 package demosummary.io;
2
3 import java.io.FileOutputStream;
4 import java.io.IOException;
5
6 /**
7 * 3. 寫出指定長度位元組數組: write(byte[] b, int off, int len) ,每次寫出從off索引開始,len個位元組
8 */
9 public class FosWrite3 {
10 public static void main(String[] args) throws IOException {
11 //創建FileOutputStream對象
12 FileOutputStream fos = new FileOutputStream("./src/demosummary/io/tmp/a.txt");
13 //將字元串轉換成位元組數組
14 byte[] bytes = "abcjava程式員".getBytes();
15 //寫出相應的字元串到a.txt文件中
16 fos.write(bytes,3,4);
17 //釋放資源
18 fos.close();
19 }
20 }
數據的追加續寫
1.public FileOutputStream(File file, boolean append) : 創建文件輸出流以寫入由指定的 File對象表示的 文件。
2.public FileOutputStream(String name, boolean append) : 創建文件輸出流以指定的名稱寫入文件
1 package demosummary.io;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6
7 /**
8 * 1.public FileOutputStream(File file, boolean append) 創建文件輸出流以寫入由指定的File對象表示的文件。
9 *
10 * 2.public FileOutputStream(String name, boolean append) 創建文件輸出流以指定的名稱寫入文件
11 */
12 public class FosWrite4 {
13 public static void main(String[] args) throws IOException {
14 //1.public FileOutputStream(File file, boolean append) 創建文件輸出流以寫入由指定的File對象表示的文件
15 // 創建File對象
16 File file = new File("./src/demosummary/io/tmp/a.txt");
17 //創建FileOutputStream對象
18 FileOutputStream fos = new FileOutputStream(file,true);//true為追加,false為清空
19 //將字元串轉換成數據數組
20 byte[] bytes = "java程式員".getBytes();
21 //把"程式員"三個字元串寫出到a.txt文件中
22 fos.write(bytes,4,9);//一個中文三個位元組
23 //釋放資源
24 fos.close();
25 /**
26 * 執行前:java
27 * 執行後:java程式員
28 */
29 }
30 }
備註:以上兩個構造方法,參數中都需要傳入一個boolean類型的值, true 表示追加數據, false 表示清空原有數據。 這樣創建的輸出流對象,就可以指定是否追加續寫了
寫出換行
Windows系統里,換行符號是 \r\n
1 package demosummary.io;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6
7 public class FosWrite5 {
8 public static void main(String[] args) throws IOException {
9 //1.public FileOutputStream(File file, boolean append) 創建文件輸出流以寫入由指定的File對象表示的文件
10 // 創建File對象
11 File file = new File("./src/demosummary/io/tmp/b.txt");
12 //創建FileOutputStream對象
13 FileOutputStream fos = new FileOutputStream(file,true);//true為追加,false為清空
14 //創建數組
15 byte[] bytes = {97, 98, 99, 100, 101};
16 //遍曆數組
17 for (byte b : bytes) {
18 //寫出數據到b.txt文件中
19 fos.write(b);
20 //寫一個換一行
21 fos.write("\r\n".getBytes());
22 }
23 //釋放資源
24 fos.close();
25 /**
26 * 執行結果
27 * a
28 * b
29 * c
30 * d
31 * e
32 */
33 }
34 }
位元組輸入流【InputStream】
java.io.InputStream 抽象類是表示位元組輸入流的所有類的超類,可以讀取位元組信息到記憶體中。它定義了位元組輸入 流的基本共性功能方法。
1.public void close() :關閉此輸入流並釋放與此流相關聯的任何系統資源。
2.public abstract int read() : 從輸入流讀取數據的下一個位元組。
3.public int read(byte[] b) : 從輸入流中讀取一些位元組數,並將它們存儲到位元組數組 b中 。
FileInputStream類
java.io.FileInputStream 類是文件輸入流,從文件中讀取位元組
構造方法
1.FileInputStream(File file) : 通過打開與實際文件的連接來創建一個FileInputStream ,該文件由文件系 統中的 File對象 file命名。
2.FileInputStream(String name) : 通過打開與實際文件的連接來創建一個 FileInputStream ,該文件由文件 系統中的路徑名 name命名。
讀取位元組數據
1. 讀取位元組: read 方法,每次可以讀取一個位元組的數據,提升為int類型,讀取到文件末尾,返回 -1
1 package demosummary.io;
2
3 import java.io.FileInputStream;
4 import java.io.IOException;
5
6 public class FisRead1 {
7 public static void main(String[] args) throws IOException {
8 //創建FileInputStream對象
9 FileInputStream fis = new FileInputStream("./src/demosummary/io/tmp/a.txt");
10 //讀取a.txt文件內容:abcd
11 int read = fis.read();
12 System.out.println((char)read);
13 read = fis.read();
14 System.out.println((char)read);
15 read = fis.read();
16 System.out.println((char)read);
17 read = fis.read();
18 System.out.println((char)read);
19 read = fis.read();
20 System.out.println(read);
21 //釋放資源
22 fis.close();
23 /**
24 * a
25 * b
26 * c
27 * d
28 * -1
29 */
30 }
31 }