文件输出流

实现读取文件有多种方式,针对不一样的文件类型,有不一样的读取方法。读取文件的关键技术点以下: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方法读取指针后面的内容。

相关文章
相关标签/搜索