黑马程序员技术交流社区

标题: 5、 定义一个文件输入流,调用read(byte[] b)方法将exercise.txt... [打印本页]

作者: 陈新海1    时间: 2014-8-20 18:17
标题: 5、 定义一个文件输入流,调用read(byte[] b)方法将exercise.txt...
本帖最后由 陈新海1 于 2014-8-20 18:24 编辑
  1. //老师很喜欢看乱码吗?
  2. // 创建一个文件输入流,用类的相对路径取得文件对象,
  3.                 InputStream fis = new FileInputStream(Test5.class.getResource("exercise.txt").getFile());
  4.                 byte[] buf = new byte[5]; // 创建一个缓冲区大小为5字节
  5.                 int len = 0;
  6.                 while ((len = fis.read(buf)) != -1) { // 从fis流中读取数据并存到buf数组中
  7.                         System.out.print(new String(buf, 0, len));// 每次5个字节转换为String对象
  8.                                                 // (一个字符等于一个字节,一个汉字等于两个字节)每第五个字节如果是汉字会出现乱码
  9.                 }
  10.                 fis.close();

  11. //平常是这样写的
  12. FileReader fr = new FileReader(Test5.class.getResource("exercise.txt").getFile());
  13.                 char[] buf = new char[5];
  14.                 int len = 0;
  15.                 while ((len = fr.read(buf)) != -1) {
  16.                         System.out.print(new String(buf, 0, len));                               
  17.                 }
  18.                 fr.close();
复制代码



作者: fantacyleo    时间: 2014-8-20 18:27
这不是你前两天问过的题么?让你每次读5个字节,可没让你每次打印5个字节啊。用ByteArrayInputStream就ok了
作者: 陈新海1    时间: 2014-8-20 20:11
fantacyleo 发表于 2014-8-20 18:27
这不是你前两天问过的题么?让你每次读5个字节,可没让你每次打印5个字节啊。用ByteArrayInputStream就ok了 ...

原来是用这个流读啊,可惜我不会你把我这题做下,有奖励哦
作者: fantacyleo    时间: 2014-8-20 20:24
陈新海1 发表于 2014-8-20 20:11
原来是用这个流读啊,可惜我不会你把我这题做下,有奖励哦

打错了,应该是ByteArrayOutputStream。读随便你用什么流,输出流用这个。ByteArrayOutputStream有toString方法可以指定打印时用什么字符集。提示已经非常到位了,这要再写不出来就太说不过去了。我技术分都60了,不缺什么。
作者: 陈新海1    时间: 2014-8-20 20:50
fantacyleo 发表于 2014-8-20 20:24
打错了,应该是ByteArrayOutputStream。读随便你用什么流,输出流用这个。ByteArrayOutputStream有toStri ...

我再看了毕老师的,看懂了又忘了,这个流真的太少用了,还是没感觉,
作者: 小糊涂神    时间: 2014-8-22 16:20
受教了。
作者: 790324255a    时间: 2014-8-26 15:07
楼主关于这道题 你最后的结果是可以显示乱码 还是不可以显示乱码 一定要按原内容输出
作者: 陈新海1    时间: 2014-8-26 15:54
790324255a 发表于 2014-8-26 15:07
楼主关于这道题 你最后的结果是可以显示乱码 还是不可以显示乱码 一定要按原内容输出  ...

他这道题是想考你:用字节流(也只有字节流有read(byte【】)是什么都可以读取的,只要你缓冲区大小比文件大就不会乱码,题目的5字节单位会显示乱码。
作者: 790324255a    时间: 2014-8-26 16:01
陈新海1 发表于 2014-8-26 15:54
他这道题是想考你:用字节流(也只有字节流有read(byte【】)是什么都可以读取的,只要你缓冲区大小比文 ...
  1. public class Test7 {

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

  3.                 FileInputStream fis = null;
  4.                 ByteArrayOutputStream baos = null;
  5.                 try {
  6.                         fis = new FileInputStream("exercise.txt");
  7.                         baos = new ByteArrayOutputStream();
  8.                         byte[] buf = new byte[5];
  9.                         int len = 0;
  10.                         while ((len = fis.read(buf)) != -1) {
  11.                                 baos.write(buf, 0, len);
  12.                         }
  13.                         System.out.println(baos.toString("gbk"));
  14.                 } catch (Exception e) {
  15.                         e.printStackTrace();
  16.                 } finally {
  17.                         if (fis != null)
  18.                                 try {
  19.                                         fis.close();
  20.                                 } catch (IOException e) {
  21.                                         e.printStackTrace();
  22.                                 }
  23.                         if (baos != null)
  24.                                 try {
  25.                                         baos.close();
  26.                                 } catch (IOException e) {
  27.                                         e.printStackTrace();
  28.                                 }
  29.                 }
  30.         }
  31. }
复制代码
这种写法我不知行不 怕不不符合要求

作者: 陈新海1    时间: 2014-8-26 16:25
790324255a 发表于 2014-8-26 16:01
这种写法我不知行不 怕不不符合要求

其实目的就是控制台啊,都用到内存流拉,可以的挺高级的
作者: 790324255a    时间: 2014-8-26 16:48
陈新海1 发表于 2014-8-26 16:25
其实目的就是控制台啊,都用到内存流拉,可以的挺高级的

但愿 这样行吧
作者: ye361571404    时间: 2014-10-7 18:26
fantacyleo 发表于 2014-8-20 20:24
打错了,应该是ByteArrayOutputStream。读随便你用什么流,输出流用这个。ByteArrayOutputStream有toStri ...

看到你这个提示我就明白了,谢谢
作者: 海饼干    时间: 2014-11-29 20:07
exercise.txt应该放在哪个文件夹下

作者: ql627666537    时间: 2014-12-23 21:07
正在做这个题
作者: 安日成    时间: 2015-5-3 17:02
谢谢你的分享
作者: 蓝墨清幽    时间: 2015-6-19 16:36
学习了                                    
作者: RockLee    时间: 2015-6-19 21:39

学习了
作者: 铿锵的小黑马    时间: 2015-9-8 11:27
让人头疼的一件事....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2