1. 程式人生 > >ava.io.InputStream & java.io.FileInputStream

ava.io.InputStream & java.io.FileInputStream

作用 txt print byte 文件復制 exce 方法參數 end read

java.io.InputStream & java.io.FileInputStream

java.io.InputStream,這個抽象類是表示字節輸入流的超類,這個抽象類的共性的方法有:

方法 作用
int read() 從輸入流中讀取數據的下一個字節,並返回,到末尾就返回-1
int read(byte[] b) 從輸入流中讀取一定數量的字節,並將其存儲在緩沖區數組b之中
void close() 關閉輸入流,並釋放與輸入流相關的系統資源

java.io.FileInputStream extends InputStream

構造方法

構造方法 作用
FileInputStream(String name) 創建一個FileInputStream對象,把該對象指向構造方法參數中指定的文件
FileInputStream(File file) 創建一個FileInputStream對象,把該對象指向構造方法參數中指定的文件

參數:String name(文件路徑)、File file(文件對象)

2、讀取文件

java程序 --> JVM --> OS --> OS調用讀取數據的方法 --> 讀取文件

3、字節輸入流讀取文件的步驟

  • 創建FileInputStream對象,構造方法中指定要讀取的文件(路徑名或者文件對象)
  • 使用FileInputStream對象的方法read,讀取文件
  • 使用FileInputStream對象的方法close,釋放資源
package cn.zhuobo.day14.streamOutput;

import java.io.FileInputStream;

import java.io.IOException;

public class Demo02FileInputStream {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("/home/zhuobo/Desktop/a.txt");
        /*int i = fis.read();
        System.out.println(i);// 98
        i = fis.read();
        System.out.println(i);// 99
        i = fis.read();
        System.out.println(i);// 104*/
        int i = 0;
        while ((i = fis.read()) != -1) {
            System.out.println(i);
        }// 循環讀取直到末尾,-1是末尾
    }
}

4、字節輸入流一次讀取一個字節的原理

每次指針向後移動一個單位

5、一次讀取多個字節

使用int read(byte[] b)

byte[] bytes = new byte[5];// 每次讀取最多5個,但是一般定義長度為1024
int len = fis.read(bytes);// len指的是讀取的有效字節個數
String str = new String(bytes);
System.out.println(len);
System.out.println(str);

byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = fis.read(bytes)) != -1) {
            System.out.println((new String(bytes)).trim());
        }

6、文件復制練習

原文件-->讀出來-->寫進去-->目標文件

package cn.zhuobo.day14.streamOutput;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
    public static void main(String[] args) throws IOException {
        File fileDes = new File("/home/zhuobo/Desktop/22.png");
        FileOutputStream fos = new FileOutputStream(fileDes);
        File fileSource = new File("/home/zhuobo/Desktop/dir/1.png");
        FileInputStream fis = new FileInputStream(fileSource);

        int len = 0;
        byte[] bytes = new byte[1024];
        while((len = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
        }

        // 先關閉寫的流(output)再關閉讀的流(input)
        fos.close();
        fis.close();
    }

ava.io.InputStream & java.io.FileInputStream