Java檔案讀寫的一些方法總結

來源:互聯網
上載者:User

檔案讀寫有以下幾種常用的方法

1、位元組讀寫(InputStream/OutputStream)、字元讀取(FileReader/FileWriter)

FileInputStream的read(buffer)方法,每次從來源程式檔案OpenFile.java中讀取512個位元組,儲存在緩衝區buffer中,再將以buffer中的值構造的字串new String(buffer)顯示在螢幕上。程式如下(本常式序放在包biz.1cn.stream裡面,另外請在根目錄下建立TestFile.txt檔案,以便正常運行

 代碼如下 複製代碼

package biz.1cn.stream;
import java.io.FileInputStream;
import java.io.IOException;
/**
 * @author chenrz(simon)
 * @date 2006-6-29
 *       <p>
 *       JAVA位元組流例子-讀檔案
 *       </p>
 */
public class ReadFile {
 public static void main(String[] args) {
     try {
  // 建立檔案輸入資料流對象
  FileInputStream is = new FileInputStream("TestFile.txt");
  // 設定讀取的位元組數
  int n = 512;
  byte buffer[] = new byte[n];
  // 讀取輸入資料流
  while ((is.read(buffer, 0, n) != -1) && (n > 0)) {
      System.out.print(new String(buffer));
  }
  System.out.println();
  // 關閉輸入資料流
  is.close();
     } catch (IOException ioe) {
  System.out.println(ioe);
     } catch (Exception e) {
  System.out.println(e);
     }
 }
}

本例用System.in.read(buffer)從鍵盤輸入一行字元,儲存在緩衝區buffer中,再以FileOutStream的write(buffer)方法,將buffer中內容寫入檔案WriteFile.txt中,程式如下(本常式序放在包biz.1cn.stream裡面,另外運行後會在根目錄下建立WriteFile.txt檔案):

 代碼如下 複製代碼

package biz.1cn.stream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * @author chenrz(simon)
 * @date 2006-6-29
 *       <p>
 *       JAVA位元組流例子-寫檔案(www.1cn.biz)
 *       </p>
 */
public class WriteFile {
 public static void main(String[] args) {
     try {
  System.out.print("輸入要儲存檔案的內容:");
  int count, n = 512;
  byte buffer[] = new byte[n];
  // 讀取標準輸入資料流
  count = System.in.read(buffer);
  // 建立檔案輸出資料流對象
  FileOutputStream os = new FileOutputStream("WriteFile.txt");
  // 寫入輸出資料流
  os.write(buffer, 0, count);
  // 關閉輸出資料流
  os.close();
  System.out.println("已儲存到WriteFile.txt!");
     } catch (IOException ioe) {
  System.out.println(ioe);
     } catch (Exception e) {
  System.out.println(e);
     }
 }
}

2、字元讀取(FileReader/FileWriter)

 代碼如下 複製代碼

package test;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test {

public static void main(String arg[]) {
  String fileName = "E:sharetest.txt";
  String writeData = "HelloWorld!rnnihao我的記憶體是3G的 ";
  File file = new File(fileName);
  if(file.exists()){
   file.delete();
  }
 
  char[] byteOutData = writeData.toCharArray();
  char[] byteInData = new char[50];
  int length = 0;
 
  try {
   file.createNewFile();
   if(file.exists() && file.canWrite()){
    FileWriter fileWrite = new FileWriter(file);
    fileWrite.write(byteOutData);
    fileWrite.close();
   }
   if (file.exists() && file.canRead()) {
    FileReader fileReader = new FileReader(file);
    while((length = fileReader.read(byteInData)) !=-1){
     System.out.print(new String(byteInData,0,length));
    }

     fileReader.close();
   }

  } catch (IOException e) {
   System.out.println("IOException occur");
   e.getMessage();
  }
}
}


3、行讀取(BufferedReader/BufferedWriter)


代碼(以讀取為例):

 代碼如下 複製代碼


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
/**
 * <b>檔案讀取類</b><br />
 * 1、按位元組讀取檔案內容<br />
 * 2、按字元讀取檔案內容<br />
 * 3、按行讀取檔案內容<br />
 * @author qin_xijuan
 *
 */
public class FileOperate {
   
    private static final String FILE_PATH = "d:/work/the List of Beautiful Music.txt";

    /**
     * 以位元組為單位讀取檔案內容
     * @param filePath:需要讀取的檔案路徑
     */
    public static void readFileByByte(String filePath) {
        File file = new File(filePath);
        // InputStream:此抽象類別是表示位元組輸入資料流的所有類的超類。
        InputStream ins = null ;
        try{
            // FileInputStream:從檔案系統中的某個檔案中獲得輸入位元組。
            ins = new FileInputStream(file);
            int temp ;
            // read():從輸入資料流中讀取資料的下一個位元組。
            while((temp = ins.read())!=-1){
                System.out.write(temp);
            }
        }catch(Exception e){
            e.getStackTrace();
        }finally{
            if (ins != null){
                try{
                    ins.close();
                }catch(IOException e){
                    e.getStackTrace();
                }
            }
        }
    }
   
    /**
     * 以字元為單位讀取檔案內容
     * @param filePath
     */
    public static void readFileByCharacter(String filePath){
        File file = new File(filePath);
        // FileReader:用來讀取字元檔案的便捷類。
        FileReader reader = null;
        try{
            reader = new FileReader(file);
            int temp ;
            while((temp = reader.read()) != -1){
                if (((char) temp) != 'r') {
                    System.out.print((char) temp);
                }
            }
        }catch(IOException e){
            e.getStackTrace();
        }finally{
            if (reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
   
    /**
     * 以行為單位讀取檔案內容
     * @param filePath
     */
    public static void readFileByLine(String filePath){
        File file = new File(filePath);
        // BufferedReader:從字元輸入資料流中讀取文本,緩衝各個字元,從而實現字元、數組和行的高效讀取。
        BufferedReader buf = null;
        try{
            // FileReader:用來讀取字元檔案的便捷類。
            buf = new BufferedReader(new FileReader(file));
            // buf = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            String temp = null ;
            while ((temp = buf.readLine()) != null ){
                System.out.println(temp);
            }
        }catch(Exception e){
            e.getStackTrace();
        }finally{
            if(buf != null){
                try{
                    buf.close();
                } catch (IOException e) {
                    e.getStackTrace();
                }
            }
        }
    }

    public static void main(String args[]) {
        readFileByByte(FILE_PATH);
        readFileByCharacter(FILE_PATH);
        readFileByLine(FILE_PATH);
    }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.