FileInputStream和FileOutputStream讀寫文件,然後實現文件的拷貝。

IO流

Java裏面分爲兩種流:字節流和字符流。如果細分的話有,可分爲:4個文件流,4個緩衝流,2個轉換流,2個打印流,2個序列化流,2個數據流。

//文件流
FileInputStream            //字節輸入流
FileOutPutStream           //字節輸出流
FileReader                 //字符輸入流
FileWriter                 //字符輸出流

//緩衝流
BufferedInputStream        //字節輸入緩衝流
BufferedOutputStream       //字節輸出緩衝流
BufferedReader             //字符輸入緩衝流
BufferedWriter             //字符輸出緩衝流

//序列化流
ObjectInputStream          
ObjectOutputStream

//轉換流(字符流)  將字節流轉換爲字符流
InputStreamReader
OutputStreamWriter

//數據流
DataInputStream
DataOutputStream

//打印流
PrintWriter
PrintStream

輸入輸出方向

對於IO流而言,IO(input Output)輸入輸出的意思。在輸入輸出之間我們需要找一個參照物,然後判斷相對於參照物而言是輸入還是輸出。而我們一般會把內存作爲參照物。當我們打開一個應用程序時,計算機會把那個應用程序加載到內存,然後等待CPU執行,對內存就相當於輸入。當我們寫代碼時,代碼首先會進內存裏面,按下Ctrl+S時,計算機會將內存中的代碼保存到硬盤中,對內存而言就相當與輸出。帶有Input  Reader輸入(讀),Output Writer輸出(寫)。

字節流和字符流

Stream表示基於字節流,Writer和Reader表示基於字符流。


用字節流FileInputStream和FileOutputStream來讀寫文件

package FileStream;

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

public class File_Stream {
    public static void main(String[] args) throws IOException {
        Scanner sca=new Scanner(System.in);

        //寫文件
        System.out.print("請輸入文件名:");
        String name=sca.next();
        File file=new File(name+".txt");//文件名        相對路徑(項目名根目錄下)
//      FileOutputStream fs=new FileOutputStream(file);                //如果文件存在 覆蓋
        FileOutputStream fos=new FileOutputStream(file,true);//true表示追加,如果文件存在 向裏面繼續添加內容
        System.out.println("請輸入寫入的內容:");
        String str=sca.next();
        byte bytes[]=str.getBytes();         //FileOutputStream 是基於字節流  把要寫入的信息 保存到字節數組中
        fos.write(bytes,0,bytes.length);//將字節數組中全部內容寫到文件中   從0—數組的長度
        fos.close();//關閉流
        System.out.println("文件寫入成功!");

        //讀文件
        FileInputStream fis=new FileInputStream(file);
        byte bt[]=new byte[1024];//1KB       每次最多讀取的1KB  根據文件大小而定
        int temp=0;
        while((temp=fis.read(bt))!=-1){    //將數據保存到數組(緩衝區)中 並返回讀取的字節數  -1表示讀完了
            System.out.println(new String(bt,0,temp));//輸出數組中保存內容 按照每次讀取的字節數
        }
        fis.close();
    }
}

運行結果:


由於FileInputStream和FileOutputStream是基於字節流的,所以每次都需要定義byte數組對讀寫進行操作。

PS:如果單獨讀取一個文件時,出現了亂碼。可能是字符集不同,Eclipse默認爲GBK,IDEA默認爲UTF-8,改成對應的字符集即可。

用字節流FileInputStream和FileOutputStream來Copy文件

package FileStream;

import java.io.*;

public class File_Copy {
    public static void main(String[] args) throws IOException {
        File file=new File("dome.txt");
        if(!file.isFile()){    //判斷文件是否存在
            System.out.println("該文件不存在,無法Copy!");
            return;
        }

        FileInputStream fis=new FileInputStream(file);   //"src\\"+file.getName()
        FileOutputStream fos=new FileOutputStream("src/"+file.getName());//把文件拷(輸出)到src下

        byte bytes[]=new byte[1024];
        int temp=0;  //邊讀邊寫
        while((temp=fis.read(bytes))!=-1){  //讀
            fos.write(bytes,0,temp);   //寫
        }
        fis.close();
        fos.close();
        System.out.println("文件拷貝成功!");
    }
}

運行結果:


在Copy文件的時候,只需要將FileInputStream和FileOutputStream一起使用,邊讀邊寫,就可以達到Copy文件的目的。


   每日雞湯:比你優秀的人仍在努力,比你差的人還沒放棄,你沒還有什麼藉口不堅持下去。


Over!

發佈了33 篇原創文章 · 獲贊 41 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章