1、IO流概述java
一、IO流:輸入輸出流(Input/Output)數組
流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象,即數據在設備間的傳輸流,app
流的本質是數據傳輸,根據數據傳輸特性將流抽象爲各類類,方便更直觀的進行數據操做ui
大概來講:spa
輸入流:把數據從文件讀到(輸入)程序中code
輸出流:從程序當中把一個數據(輸出)寫入文件中對象
二、流的分類blog
根據處理數據類型的不一樣分爲:字符流和字節流字符串
根據數據流向不一樣分爲:輸入流和輸出流get
(1)字節流
a.字節輸出流
OutputStream類的定義:
public abstract class OutputStream extends Object implements Closeable,Flushable
此抽象類是表示輸出字節流的全部類的超類,輸出流接受輸出字節並將這些字節發動到inputStream類的某個接受器
b.字節輸入流
InputStream類的定義:
public abstract class InputStream implements Closeable
這個抽象類是全部基於字節的輸入流的超類,抽象了Java的字節輸入模型。在這個類中定義了一些基本的方法。
FileinputStream 是它的子類 從文件系統中的某個文件中得到輸入字節
舉例:
package IODemo; import java.io.*; /** * 字節輸出輸入流 * 輸出流:超類OutputStream,對文件輸出流的操做的子類是FileOutputStream * 輸入流:超類InputStream,對文件輸入流的操做子類是FileInputStream */ public class ByteStreaDemo { private static void in(){ //一、肯定目標文件 File file = new File("D:\\test\\test.txt"); try { //二、構建一個輸入流對象 InputStream in = new FileInputStream(file); // 讀取的數據是一個字節一個字節的,因此要用一個字節數組來收 // 至關於一個容器來裝文件裏面的東西 1024大小表示容器能裝1024個字節 1024字節=1kb byte[] bytes = new byte[1024]; int len = -1; //表示已經讀取了多少個字節,若是是 -1,表示已經讀取到文件的末尾 //字符串拼接 StringBuilder buf = new StringBuilder(); //把數據讀入到數組中,而且返回讀取的字節數,當不等於-1時表示已經讀取到了數據,等於-1時表示已經讀完 while ((len = in.read(bytes)) !=-1){ buf.append(new String(bytes)); // 根據讀取到的字節數組,轉換爲字符串內容,而且進行拼接,添加到StringBuilder中 } System.out.println(buf); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void out(){ //一、肯定目標文件 File file = new File("D:\\test\\test.txt"); try { // 二、構建一個文件輸出流的對象 OutputStream out = new FileOutputStream(file,true); // 若是加上true的話表示的是在原文件內容上追加內容,若是不加ture默認是重寫 // 三、內容 String info = "你們好,我是落魄書生!\r\n"; //window 下 \r\n 表示換行 //四、out對象寫入文件中 要字節類型 字符串轉字節類型 out.write(info.getBytes()); System.out.println("寫入成功!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { out(); in(); } }