FileInputStream讀取文件&FileOutputStream寫入文件


概念摘自:http://jingyan.baidu.com/article/5552ef473ab5f2518ffbc98e.html

 Java的流式輸入輸出建立在4個抽象類的基礎上:InputStream,OutputStream,Reader和Writer。它們用來創建具體的流式子類。InputStream和OutputStream類被設計為字節類,而Reader和Writer被設計為字符流類。

 一般,處理字符和字符串用字符流類,字節和二進制文件用字節類。本篇只講字節流類;

 

 字節流中的兩個頂層類為:InputStream(輸入字節流)和OutputStream(輸出字節流). 其下有兩個子類FileInputStream(文件輸入流)和FileOutputStream(文件輸出流)。

 FileInputStream讀取的兩種方法:逐字節讀;以字節數組讀取兩種方式;

public static void main(String[] args) {
        //創建文件對象,指定要讀取的文件路徑(要讀的文件一定要存在)
        File file=new File("E:\\a.text");
        
        try {
            //創建文件輸入流對象.指定要讀取的文件對象
            FileInputStream fin=new FileInputStream(file);
            
            /***********方法一(將輸入流的數據傳遞給字節數組)*********/
            //創建字節數組,准備將文件流中的數據傳給字節數組
            /*byte[] b=new byte[fin.available()];
            
            //將字節流中的數據傳遞給字節數組
            fin.read(b);
            
            //將字節數組轉為字符串
            String s=new String(b);
            
            System.out.println(s);*/
            /*********************************************/
            
            /********方法二(逐字節讀取數據從字節輸入流)***********/
            int l;
            while ((l=fin.read())!=-1) {
                System.out.println((char)l);
                //測試read()方法的含義,什么是逐字節讀,及int類型的l代表什么意思,測試結果l代表存儲的內容的int的表現形式,與進制相關,不做深究
                //System.out.println((char)l+"\t"+l);
            }
            
            fin.close();
            /************************************************/
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

FileOutputStream寫入文件的兩種方式:以字節數組寫入;逐字節寫入;

public static void main(String[] args) {
        // TODO Auto-generated method stub
        //創建文件對象,指定要寫出的文件路徑
        File file=new File("d:\\d.text");
        
        try {
            //創建文件字節輸出流對象,准備向d.txt文件中寫出數據,true表示在原有的基礎上增加內容
            FileOutputStream fout=new FileOutputStream(file,true);
            Scanner sc=new Scanner(System.in);
            
            System.out.println("請寫出一段字符串:");
            String msg=sc.next()+"\r\n";;
            
            /******************(方法一)按字節數組寫入**********************/
            //byte[] bytes = msg.getBytes();//msg.getBytes()將字符串轉為字節數組
            
            //fout.write(bytes);//使用字節數組輸出到文件
            /******************(方法一)逐字節寫入**********************/
            byte[] bytes = msg.getBytes();
            for (int i = 0; i < bytes.length; i++) {
                fout.write(bytes[i]);//逐字節寫文件
            }
            fout.flush();//強制刷新輸出流
            fout.close();//關閉輸出流
            System.out.println("寫入完成!");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

字節流轉化為字符流

            //創建字節輸出流對象
            FileOutputStream fout=new FileOutputStream(new File("student.xml"));
            //創建字節流緩沖區,加快寫出速度
            BufferedOutputStream bout=new BufferedOutputStream(fout);
            
            //創建字符輸出流對象
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(bout, "utf-8"));
            
            doc.write(bw);
            
            bw.flush();
            bw.close();

為什么將字節流轉化為字符流?

因為字節流是二進制讀寫的,在外部打開是亂碼,轉化為字符串或字符可以讓文件在外部也可以看到內容!根據具體的需求確定用哪個!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM