文件輸出流

實現讀取文件有多種方式,針對不一樣的文件類型,有不一樣的讀取方法。讀取文件的關鍵技術點以下:java

  1.用FileInputStream打開文件輸入流,經過read方法以字節爲單位讀取文件,是最通用的讀取文件的方法,能讀取任何文件,特別適合讀取二進制文件,如圖片、聲音、視頻文件。數組

  2.用InputStreamReader打開文件輸入流,經過read方法以字符爲單位讀取文件,經常使用於讀取文本文件。dom

  3.用BufferedReader打開文件輸入流,經過readLine方法以行爲單位讀取文件,經常使用於讀取格式化文本。spa

  4.用RandomAccessFile打開文件輸入流,經過seek方法將讀指針移到文件內容中間,再經過read方法讀取指針後的文件內容,經常使用於隨機讀取文件。指針

  經過以上各類文件輸入流讀取文件後,都須要調用close方法關閉文件輸入流。code

實例以下:視頻

1對象

2圖片

3ci

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

package book.io;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.RandomAccessFile;

import java.io.Reader;

 

/**

 *多種方式讀取文件

 *按字節讀取文件內容、按字符讀取文件內容、按行讀取文件內容、隨機讀取文件內容

 */

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 (Exception 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 e) {

            e.printStackTrace();

        }finally{

            if(in != null){

                try {

                    in.close();

                catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    //以字符爲單位讀取文件,經常使用於讀取文本、數字等類型的文件

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

                if(((char)tempchar)!='\r'){

                    System.out.println((char)tempchar);

                }

            }

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

                if((charread == tempchars.length)&&(tempchars[tempchars.length-1] !='\r')){

                    System.out.println(tempchars);

                }else{

                    for(int i=0;i<charread;i++){

                        if(tempchars[i] == '\r'){

                            continue;

                        }else{

                            System.out.println(tempchars[i]);

                        }

                    }

                }

            }

        catch (Exception e) {

            e.printStackTrace();

        }

    }

    //以行爲單位讀取文件,經常使用於讀取面向行的格式化文件

    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 (Exception e) {

            e.printStackTrace();

        }finally{

            if(reader != null){

                try {

                    reader.close();

                catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    //隨機讀取文件

    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個字節,則讀剩下的字節

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

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

            }

        catch (Exception e) {

            e.printStackTrace();

        }finally{

            if(randomFile != null){

                try {

                    randomFile.close();

                catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

         

    }

    //顯示輸入流中還剩的字節數

    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:/Users/Admin/Desktop/CAI/20160718/newTemp.txt";

        ReadFromFile.readFileByBytes(fileName);

        ReadFromFile.readFileByChars(fileName);

        ReadFromFile.readFileByLines(fileName);

        ReadFromFile.readFileByRandomAccess(fileName);

         

    }

}

 

  分析:readFileByBytes以字節爲單位讀取文件內容。使用了文件輸入流類FileInputStream,調用read方法能夠一次從文件輸入流中讀取一個字節,也能夠將多個字節讀取到字節數組中,當讀取到字節數爲-1時,到達文件尾,讀取文件結束。

  readFileByChars以字符爲單位讀取文件內容。使用了InputStreamReader類,將FileInputStream字節輸入流包裝成字符流,而後調用InputStreamReader的read方法能夠一次從文件輸入流中讀取一個字符,也能夠將多個字符讀取到字符數組中,但讀取的字符數爲-1時,到達文件尾,讀取文件結束。

  readFileByLines以行爲單位讀取文件內容。經過File對象構造FileReader對象,再經過FileReader對象構造BufferedReader對象,它的readLine方法能夠一次從文件中讀取一行內容並保存到字符串中,若是返回的字符串爲null,則到達文件尾,讀取文件結束。

  上面3種方法都是從頭至尾讀取文件內容。readFileByRandomAccess方法則能夠隨機讀取文件內容,使用RandomAccessFile類構造RandomAccessFile對象時,能夠指定訪問模式,有「只讀」、「只寫」和「讀寫」模式。經過seek方法移動讀指針的起始位置,再經過read方法讀取指針後面的內容。

相關文章
相關標籤/搜索