Java IO file文件的寫入和讀取及下載


一、FileWriter 和BufferedWriter 結合寫入文件

  FileWriter是字符流寫入字符到文件。默認情況下,它會使用新的內容代替文件原有的所有內容,但是,當指定一個true值作為FileWriter構造函數的第二個參數,它會保留現有的內容,並追加新內容在文件的末尾。

  BufferedWriter:緩沖字符,是一個字符流類來處理字符數據。不同於字節流(數據轉換成字節FileOutPutStream),可以直接寫字符串、數組或字符數據保存到文件。

默認情況,替換原有內容:   new FileWriter(file);

保留原來的文件內容:       new  FileWriter(file, true
 
public static void writeInFileByfb() {
        File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
        String content="要寫入文件的新內容";
        FileWriter fw=null;
        BufferedWriter bw=null;
        try{
            if(!f.exists()){
                f.createNewFile();
            }
             fw=new FileWriter(f.getAbsoluteFile(),true);  //true表示可以追加新內容  
                         //fw=new FileWriter(f.getAbsoluteFile()); //表示不追加
             bw=new BufferedWriter(fw);
             bw.write(content);
             bw.close();
        }catch(Exception e){
           e.printStackTrace();
        }
        
    }

二、FileOutPutStream 字節流寫入文件

  文件輸出流是一種用於處理原始二進制數據的字節流淚。 為了將數據寫入到文件中,必須將數據轉換為字節,並保存到文件。具體例子如下:

package com.joyplus.test;


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

public class FileOutPutTest {
    public static void main(String[] args) {
        FileOutPutTest.writeInFileByfi();
    }
    
    
    public static void writeInFileByfi(){
        File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fi.txt");
        FileOutputStream fos=null;
        try {
            if(!f.exists()){
                f.createNewFile();
            }
             fos=new FileOutputStream(f);
            String content="要寫入的新內容!";
            fos.write(content.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
}

三、RandomAccessFile 寫入文件

   RandomAccessFile的唯一父類是Object,與其他流父類不同。是用來訪問那些保存數據記錄的文件的,這樣你就可以用seek( )方法來訪問記錄,並進行讀寫了。這些記錄的大小不必相同;但是其大小和位置必須是可知的.

   如下例子是RandomAccessFile如何進行寫入文件的例子:

public static void writeInFileByRdA(){
        String content="randowAccessFile";
        try{
              // 打開一個隨機訪問文件流,按讀寫方式
            RandomAccessFile randomFile = new RandomAccessFile("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt", "rw");
            // 文件長度,字節數
            long fileLength = randomFile.length();
            //將寫文件指針移到文件尾。
            randomFile.seek(fileLength);
            randomFile.writeBytes(content);
            randomFile.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

文件的讀取

  一、FileInputStream 字節流讀取文件 【注意:讀取中文的時候會亂碼】

具體代碼如下:

//按照字節讀取文件內容
    public static String readFileByByte(){
        String s="";
        File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
        InputStream in=null;
        try{
            in=new FileInputStream(f);
            int tempByte;
            while((tempByte=in.read())!=-1){
                System.out.println(tempByte);
                s+=tempByte;
            }
            in.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("content:"+s);
        return s;
    }

二、InputStreamReader 字符流讀取文件內容

//按照字符讀取文件內容
    public static String readFileByChar(){
        String s="";
        File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
        Reader rdr=null;
        try{
            rdr=new InputStreamReader(new FileInputStream(f));
            int temp;
            while((temp=rdr.read())!=-1){
                //對於window下,\r\n這兩個字符在一起時,表示一個換行。   
                //但是如果這兩個字符分開顯示時,會換兩行。
                //因此,屏蔽掉\r,或者屏蔽掉\n。否則,將會出現很多空行
                if(((char)temp)!='\r'){
                    s+=(char)temp;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                rdr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println(s);
        return s;
    }

三、BufferedReader 以行為單位讀取文件內容

//按照行讀取文件
    public static String readFileByLine(){
        String s="";
        File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
        BufferedReader br=null;
        try{
            System.out.println("按照行讀取文件內容");
            br=new BufferedReader(new FileReader(f));
            String temp;
            while((temp=br.readLine())!=null){
                s+=temp;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("file content:"+s);
        return s;
    }
//隨機行讀取文件
    public static String readFileByRand(){
        String s="";
        File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
        RandomAccessFile raf=null;
        try{
            //打開一個文件流, 按只讀方式
            raf=new RandomAccessFile(f.getName(), "r");
            //文件長度,字節數
            long fileLength=raf.length();
            //讀文件的起始位置
            int beginIndex=(fileLength>4)?4:0;
            //將讀文件的開始位置移到beginIndex位置
            raf.seek(beginIndex);
            byte[] bytes=new byte[10];
            int byteread=0;
            //一次讀10個字節,如果文件內容不足10個字節,則讀剩下的文字。
            //將一次讀取的字節數賦給byteread
            while((byteread=raf.read(bytes))!=-1){
                System.out.write(bytes,0,byteread);
            }
            
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(raf!=null){
                try {
                    raf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //System.out.println("文件內容:"+s);
        return s;
    }

補充的文件知識:

 /**
     * 顯示輸入流中還剩的字節數
     */
    private static void showAvailableBytes(InputStream in) {
        try {
            System.out.println("當前字節輸入流中的字節數為:" + in.available());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 


免責聲明!

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



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