A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© denxinzlz610 中级黑马   /  2016-6-23 23:50  /  524 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

01.public class ReadFromFile {

02.    /**

03.     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。

04.     */

05.    public static void readFileByBytes(String fileName) {

06.        File file = new File(fileName);

07.        InputStream in = null;

08.        try {

09.            System.out.println("以字节为单位读取文件内容,一次读一个字节:");

10.            // 一次读一个字节

11.            in = new FileInputStream(file);

12.            int tempbyte;

13.            while ((tempbyte = in.read()) != -1) {

14.                System.out.write(tempbyte);

15.            }

16.            in.close();

17.        } catch (IOException e) {

18.            e.printStackTrace();

19.            return;

20.        }

21.        try {

22.            System.out.println("以字节为单位读取文件内容,一次读多个字节:");

23.            // 一次读多个字节

24.            byte[] tempbytes = new byte[100];

25.            int byteread = 0;

26.            in = new FileInputStream(fileName);

27.            ReadFromFile.showAvailableBytes(in);

28.            // 读入多个字节到字节数组中,byteread为一次读入的字节数

29.            while ((byteread = in.read(tempbytes)) != -1) {

30.                System.out.write(tempbytes, 0, byteread);

31.            }

32.        } catch (Exception e1) {

33.            e1.printStackTrace();

34.        } finally {

35.            if (in != null) {

36.                try {

37.                    in.close();

38.                } catch (IOException e1) {

39.                }

40.            }

41.        }

42.    }

43.

44.    /**

45.     * 以字符为单位读取文件,常用于读文本,数字等类型的文件

46.     */

47.    public static void readFileByChars(String fileName) {

48.        File file = new File(fileName);

49.        Reader reader = null;

50.        try {

51.            System.out.println("以字符为单位读取文件内容,一次读一个字节:");

52.            // 一次读一个字符

53.            reader = new InputStreamReader(new FileInputStream(file));

54.            int tempchar;

55.            while ((tempchar = reader.read()) != -1) {

56.                // 对于windows下,\r\n这两个字符在一起时,表示一个换行。

57.                // 但如果这两个字符分开显示时,会换两次行。

58.                // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。

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

60.                    System.out.print((char) tempchar);

61.                }

62.            }

63.            reader.close();

64.        } catch (Exception e) {

65.            e.printStackTrace();

66.        }

67.        try {

68.            System.out.println("以字符为单位读取文件内容,一次读多个字节:");

69.            // 一次读多个字符

70.            char[] tempchars = new char[30];

71.            int charread = 0;

72.            reader = new InputStreamReader(new FileInputStream(fileName));

73.            // 读入多个字符到字符数组中,charread为一次读取字符数

74.            while ((charread = reader.read(tempchars)) != -1) {

75.                // 同样屏蔽掉\r不显示

76.                if ((charread == tempchars.length)

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

78.                    System.out.print(tempchars);

79.                } else {

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

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

82.                            continue;

83.                        } else {

84.                            System.out.print(tempchars[i]);

85.                        }

86.                    }

87.                }

88.            }

89.

90.        } catch (Exception e1) {

91.            e1.printStackTrace();

92.        } finally {

93.            if (reader != null) {

94.                try {

95.                    reader.close();

96.                } catch (IOException e1) {

97.                }

98.            }

99.        }

100.    }

101.

102.    /**

103.     * 以行为单位读取文件,常用于读面向行的格式化文件

104.     */

105.    public static void readFileByLines(String fileName) {

106.        File file = new File(fileName);

107.        BufferedReader reader = null;

108.        try {

109.            System.out.println("以行为单位读取文件内容,一次读一整行:");

110.            reader = new BufferedReader(new FileReader(file));

111.            String tempString = null;

112.            int line = 1;

113.            // 一次读入一行,直到读入null为文件结束

114.            while ((tempString = reader.readLine()) != null) {

115.                // 显示行号

116.                System.out.println("line " + line + ": " + tempString);

117.                line++;

118.            }

119.            reader.close();

120.        } catch (IOException e) {

121.            e.printStackTrace();

122.        } finally {

123.            if (reader != null) {

124.                try {

125.                    reader.close();

126.                } catch (IOException e1) {

127.                }

128.            }

129.        }

130.    }

131.

132.    /**

133.     * 随机读取文件内容

134.     */

135.    public static void readFileByRandomAccess(String fileName) {

136.        RandomAccessFile randomFile = null;

137.        try {

138.            System.out.println("随机读取一段文件内容:");

139.            // 打开一个随机访问文件流,按只读方式

140.            randomFile = new RandomAccessFile(fileName, "r");

141.            // 文件长度,字节数

142.            long fileLength = randomFile.length();

143.            // 读文件的起始位置

144.            int beginIndex = (fileLength > 4) ? 4 : 0;

145.            // 将读文件的开始位置移到beginIndex位置。

146.            randomFile.seek(beginIndex);

147.            byte[] bytes = new byte[10];

148.            int byteread = 0;

149.            // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。

150.            // 将一次读取的字节数赋给byteread

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

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

153.            }

154.        } catch (IOException e) {

155.            e.printStackTrace();

156.        } finally {

157.            if (randomFile != null) {

158.                try {

159.                    randomFile.close();

160.                } catch (IOException e1) {

161.                }

162.            }

163.        }

164.    }

165.

166.    /**

167.     * 显示输入流中还剩的字节数

168.     */

169.    private static void showAvailableBytes(InputStream in) {

170.        try {

171.            System.out.println("当前字节输入流中的字节数为:" + in.available());

172.        } catch (IOException e) {

173.            e.printStackTrace();

174.        }

175.    }

176.

177.    public static void main(String[] args) {

178.        String fileName = "C:/temp/newTemp.txt";

179.        ReadFromFile.readFileByBytes(fileName);

180.        ReadFromFile.readFileByChars(fileName);

181.        ReadFromFile.readFileByLines(fileName);

182.        ReadFromFile.readFileByRandomAccess(fileName);

183.    }

184.}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马