天天看點

[轉Java讀取檔案]各種流

[java]讀取檔案方法大全 

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; 

        } 

            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) { 

        reader reader = null; 

            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) { 

            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]); 

                        } 

                    } 

            if (reader != null) { 

                    reader.close(); 

     * 以行為機關讀取檔案,常用于讀面向行的格式化檔案 

    public static void readfilebylines(string filename) { 

        bufferedreader reader = null; 

            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++; 

     * 随機讀取檔案内容 

    public static void readfilebyrandomaccess(string filename) { 

        randomaccessfile randomfile = null; 

            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]; 

            // 一次讀10個位元組,如果檔案内容不足10個位元組,則讀剩下的位元組。 

            // 将一次讀取的位元組數賦給byteread 

            while ((byteread = randomfile.read(bytes)) != -1) { 

                system.out.write(bytes, 0, byteread); 

            if (randomfile != null) { 

                    randomfile.close(); 

     * 顯示輸入流中還剩的位元組數 

    private static void showavailablebytes(inputstream in) { 

            system.out.println("目前位元組輸入流中的位元組數為:" + in.available()); 

    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) { 

            // 打開一個随機通路檔案流,按讀寫方式 

            randomaccessfile randomfile = new randomaccessfile(filename, "rw"); 

            //将寫檔案指針移到檔案尾。 

            randomfile.seek(filelength); 

            randomfile.writebytes(content); 

            randomfile.close(); 

     * b方法追加檔案:使用filewriter 

    public static void appendmethodb(string filename, string content) { 

            //打開一個寫檔案器,構造函數中的第二個參數true表示以追加形式寫檔案 

            filewriter writer = new filewriter(filename, true); 

            writer.write(content); 

            writer.close(); 

        string content = "new append!"; 

        //按方法a追加檔案 

        appendtofile.appendmethoda(filename, content); 

        appendtofile.appendmethoda(filename, "append end. \n"); 

        //顯示檔案内容 

        //按方法b追加檔案 

        appendtofile.appendmethodb(filename, content); 

        appendtofile.appendmethodb(filename, "append end. \n"); 

}