【轉】[Java]讀取檔案方法大全__Java

來源:互聯網
上載者:User

  1、按位元組讀取檔案內容
2、按字元讀取檔案內容
3、按行讀取檔案內容

4、隨機讀取檔案內容

public class ReadFromFile {    /**     * 以位元組為單位讀取檔案,常用於讀二進位檔案,如圖片、聲音、影像等檔案。     */    public static void readFileByBytes(String fileName) {        File file = new File(fileName);        InputStream in = null;        try {            System.out.println("以位元組為單位讀取檔案內容,一次讀一個位元組:");            // 一次讀一個位元組            in = new FileInputStream(file);            int tempbyte;            while ((tempbyte = in.read()) != -1) {                System.out.write(tempbyte);            }            in.close();        } catch (IOException e) {            e.printStackTrace();            return;        }        try {            System.out.println("以位元組為單位讀取檔案內容,一次讀多個位元組:");            // 一次讀多個位元組            byte[] tempbytes = new byte[100];            int byteread = 0;            in = new FileInputStream(fileName);            ReadFromFile.showAvailableBytes(in);            // 讀入多個位元組到位元組數組中,byteread為一次讀入的位元組數            while ((byteread = in.read(tempbytes)) != -1) {                System.out.write(tempbytes, 0, byteread);            }        } catch (Exception e1) {            e1.printStackTrace();        } finally {            if (in != null) {                try {                    in.close();                } catch (IOException e1) {                }            }        }    }    /**     * 以字元為單位讀取檔案,常用於讀文本,數字等類型的檔案     */    public static void readFileByChars(String fileName) {        File file = new File(fileName);        Reader reader = null;        try {            System.out.println("以字元為單位讀取檔案內容,一次讀一個位元組:");            // 一次讀一個字元            reader = new InputStreamReader(new FileInputStream(file));            int tempchar;            while ((tempchar = reader.read()) != -1) {                // 對於windows下,\r\n這兩個字元在一起時,表示一個換行。                // 但如果這兩個字元分開顯示時,會換兩次行。                // 因此,屏蔽掉\r,或者屏蔽\n。否則,將會多出很多空行。                if (((char) tempchar) != '\r') {                    System.out.print((char) tempchar);                }            }            reader.close();        } catch (Exception e) {            e.printStackTrace();        }        try {            System.out.println("以字元為單位讀取檔案內容,一次讀多個位元組:");            // 一次讀多個字元            char[] tempchars = new char[30];            int charread = 0;            reader = new InputStreamReader(new FileInputStream(fileName));            // 讀入多個字元到字元數組中,charread為一次讀取字元數            while ((charread = reader.read(tempchars)) != -1) {                // 同樣屏蔽掉\r不顯示                if ((charread == tempchars.length)                        && (tempchars[tempchars.length - 1] != '\r')) {                    System.out.print(tempchars);                } else {                    for (int i = 0; i < charread; i++) {                        if (tempchars[i] == '\r') {                            continue;                        } else {                            System.out.print(tempchars[i]);                        }                    }                }            }        } catch (Exception e1) {            e1.printStackTrace();        } finally {            if (reader != null) {                try {                    reader.close();                } catch (IOException e1) {                }            }        }    }    /**     * 以行為單位讀取檔案,常用於讀面向行的格式檔案     */    public static void readFileByLines(String fileName) {        File file = new File(fileName);        BufferedReader reader = null;        try {            System.out.println("以行為單位讀取檔案內容,一次讀一整行:");            reader = new BufferedReader(new FileReader(file));            String tempString = null;            int line = 1;            // 一次讀入一行,直到讀入null為檔案結束            while ((tempString = reader.readLine()) != null) {                // 顯示行號                System.out.println("line " + line + ": " + tempString);                line++;            }            reader.close();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (reader != null) {                try {                    reader.close();                } catch (IOException e1) {                }            }        }    }    /**     * 隨機讀取檔案內容     */    public static void readFileByRandomAccess(String fileName) {        RandomAccessFile randomFile = null;        try {            System.out.println("隨機讀取一段檔案內容:");            // 開啟一個隨機訪問檔案流,按唯讀方式            randomFile = new RandomAccessFile(fileName, "r");            // 檔案長度,位元組數            long fileLength = randomFile.length();            // 讀檔案的起始位置            int beginIndex = (fileLength > 4) ? 4 : 0;            // 將讀檔案的開始位置移到beginIndex位置。            randomFile.seek(beginIndex);            byte[] bytes = new byte[10];            int byteread = 0;            // 一次讀10個位元組,如果檔案內容不足10個位元組,則讀剩下的位元組。            // 將一次讀取的位元組數賦給byteread            while ((byteread = randomFile.read(bytes)) != -1) {                System.out.write(bytes, 0, byteread);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            if (randomFile != null) {                try {                    randomFile.close();                } catch (IOException e1) {                }            }        }    }    /**     * 顯示輸入資料流中還剩的位元組數     */    private static void showAvailableBytes(InputStream in) {        try {            System.out.println("當前位元組輸入資料流中的位元組數為:" + in.available());        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        String fileName = "C:/temp/newTemp.txt";        ReadFromFile.readFileByBytes(fileName);        ReadFromFile.readFileByChars(fileName);        ReadFromFile.readFileByLines(fileName);        ReadFromFile.readFileByRandomAccess(fileName);    }}

5、將內容追加到檔案尾部

public class AppendToFile {    /**     * A方法追加檔案:使用RandomAccessFile     */    public static void appendMethodA(String fileName, String content) {        try {            // 開啟一個隨機訪問檔案流,按讀寫方式            RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");            // 檔案長度,位元組數            long fileLength = randomFile.length();            //將寫檔案指標移到檔案尾。            randomFile.seek(fileLength);            randomFile.writeBytes(content);            randomFile.close();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * B方法追加檔案:使用FileWriter     */    public static void appendMethodB(String fileName, String content) {        try {            //開啟一個寫檔案器,建構函式中的第二個參數true表示以追加形式寫檔案            FileWriter writer = new FileWriter(fileName, true);            writer.write(content);            writer.close();        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        String fileName = "C:/temp/newTemp.txt";        String content = "new append!";        //按方法A追加檔案        AppendToFile.appendMethodA(fileName, content);        AppendToFile.appendMethodA(fileName, "append end. \n");        //顯示檔案內容        ReadFromFile.readFileByLines(fileName);        //按方法B追加檔案        AppendToFile.appendMethodB(fileName, content);        AppendToFile.appendMethodB(fileName, "append end. \n");        //顯示檔案內容        ReadFromFile.readFileByLines(fileName);    }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.