Java IO流之字節輸入流的使用詳解
一、InputStream字節輸入流
①、是一個抽象類,不能夠創建對象,需要被繼承才能夠使用
②、在java.io包下,使用時需要導入
③、公共的方法:
方法一: int read()
方法二: int read(byte[] b)
方法三: void close()
更多方法請查看官方API
二、FileInputStream文件輸入類
①、該類繼承瞭InputStream,可以使用InputStream中的方法
②、能夠把硬盤文件中的數據讀取到內存中使用
③、構造方法
FileInputStream (String name) FileInputStream (File file)
參數的含義:
name 是文件的路徑
file 是文件
作用:
創建對象
把對象指定到構造方法中藥讀取的文件
④、使用步驟
1、創建FileInputStream對象,構造方法中綁定要讀取的數據源
2、使用對象中的read方法,讀取數據
3、釋放資源
⑤、read()方法
讀取到文件末尾會返回-1(不管讀多少次)
⑥、補充:String的構造函數
1、String (byte[] bytes) 把字節數組轉換為字符串
2、String (byte[] bytes,int offset,int length) 把字節數組的一部分轉換為字符串,從offset位置開始,取length長
⑦、一次性讀取多個文件
// todo 一次性讀取多個字節 // 1、定義一個字節數組 byte[] bytes = new byte[3]; // 2、創建文件輸入對象 FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); // 3、讀取文件 int read = fis.read(bytes); // 4、輸出 System.out.println(new String(bytes));
⑧、使用循環一次性讀取多個字節
// 一次性讀取多個字節 byte[] bytes1 = new byte[1024]; FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); int len = 0; while ((len=fis.read(bytes1))!=-1){ System.out.println(new String(bytes1,0,len)); }
三、文件復制
原理:一讀一寫
目的:將A地址裡面的a文件復制到B地址裡面去
步驟:
1、創建一個字節輸入流對象,構造方法中綁定要讀取的數據源
2、創建一個字節輸出流對象,構造方法中綁定要寫入的目的地
3、使用字節輸入流對象中的方法read讀取文件
4、使用字節輸出流對象中的方法write吧讀取到的字節寫入到目的地文件中
5、釋放資源(先釋放寫的資源再釋放讀的資源,因為寫完就代表已經讀完瞭)
方式一:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileCopy { public static void main(String[] args) { try { long s = System.currentTimeMillis(); // 1、創建字節輸入流 起始地 FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); // 2、創建字節輸出流 目的地 FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt"); // 3、讀取數據並寫入目的地 int len = 0; while ((len = fis.read())!=-1){ fos.write(len); } long e = System.currentTimeMillis(); System.out.println("傳輸文件總共用時:"+(e-s)+"毫秒"); // 4、釋放資源 fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } }
耗時:2毫秒
方式二:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileCopy { public static void main(String[] args) { try { long s = System.currentTimeMillis(); // 1、創建字節輸入流 起始地 FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); // 2、創建字節輸出流 目的地 FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt"); // 3、讀取數據並寫入目的地 byte[] b = new byte[1024]; int len = 0; while ((len = fis.read(b))!=-1){ fos.write(b,0,len); } long e = System.currentTimeMillis(); System.out.println("傳輸文件總共用時:"+(e-s)+"毫秒"); // 4、釋放資源 fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } }
兩者的區別:可以很明顯的看出來方式一和方式二的區別在於:在循環的時候判斷條件那裡出現的不一樣,使用方式二的方式可以是文件復制更加的快捷,在初期推薦使用第二種方式進行文件的復制
到此這篇關於Java IO流之字節輸入流的使用詳解的文章就介紹到這瞭,更多相關Java 字節輸入流內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java中IO流解析及代碼實例詳解
- Java基礎之FileInputStream和FileOutputStream流詳解
- Java FileInputStream與FileOutputStream使用詳解
- Java I/O流使用示例詳解
- 圖文詳解Java中的字節輸入與輸出流