黑马程序员技术交流社区

标题: 字符流复制文件? [打印本页]

作者: 心灵之歌    时间: 2013-8-17 11:04
标题: 字符流复制文件?
求大神指点下面这段程序怎么写了,文件是创建了。可文件里面是空的,为什么?????
public static void main(String[] args) throws IOException {
                BufferedInputStream is = new BufferedInputStream(new FileInputStream("c://aaaa.txt"));
               BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream("c://bbbb.txt"));
               
                 int n;
             byte[] buf = new byte[1024];
             while((n = is.read(buf)) != -1) {
                     os.write(buf, 0, n);
             }
        }
}
作者: 黄兴旺    时间: 2013-8-17 12:02
  1. import java.io.*;
  2. public class Test{
  3.         public static void main(String[] args) throws IOException {
  4.                 BufferedInputStream is =
  5.                         new BufferedInputStream(new FileInputStream("c://aaaa.txt"));
  6.                 BufferedOutputStream os =
  7.                         new BufferedOutputStream(new FileOutputStream("c://bbbb.txt"));
  8.                 int n;
  9.                 byte[] buf = new byte[1024];
  10.                 while((n = is.read(buf)) != -1) {
  11.                         os.write(buf, 0, n);
  12.                          }
  13.                 os.close();
  14.         }
  15. }
复制代码
试试这个....
作者: a2213502    时间: 2013-8-17 12:16
我来解释下,首先为了提高效率,lz使用了缓冲区,但是你把文件aaaa.txt读取后先存放到读取流缓冲区,然后把读取流缓冲区里面的字符再放到写入流的缓冲区中,并没有直接写入到bbbb.txt文件中,所以最后要刷新下,把写入流缓冲区中的字符刷新到bbbb.txt中,所以最后要加一句代码 os.close();  因为jvm默认关闭写入流前刷新一次。如果不用这个代码,也可以用os.flush();
所以为什么你的bbbb.txt是空的,是因为你没有刷新。
作者: 兜兜转转    时间: 2013-8-17 12:22
哦,我还是觉得PrintWriter比较好用,写入建议用这个
new PrintWriter(OutputStream a , boolean true);
如果参数列2指定为true的话,可以给它的方法println(),printf()等加了自动刷新功能,而且这个两个方法具备自动换行的功能。




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