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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高庆亮 黑马帝   /  2011-11-16 12:43  /  1869 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
                //得到文件对象
                File f1 = new File("D:\\Program Files\\eclipse中文\\Turing\\u\\src\\g.java");
                //创建文件夹对象
                File f2 = new File("e:\\program files1");
                File f3 = new File("e:\\program files1\\java.txt");
         try {
               
                 //---------------复制过程------------------
               
                 //创建输入,字节流
                 FileInputStream fis = new FileInputStream(f1);
                 //定义一个字节数组 当缓存
                 byte [] bytes = new byte[1024];                 int n=0;//得到实际读取到的字节数
                 //循环读取
                 while((n=fis.read(bytes))!=-1){
                         //把字节转成string
                         String s = new String(bytes,0,n);
                //----------------粘贴过程------------------
                        //创建program files1 文件夹
                 f2.mkdir();
                 //创建program files1 下面的文档
                               f3.createNewFile();
                               //将复制过来的信息存放到java.txt文件中
                               FileOutputStream fos = new FileOutputStream(f3);
                               fos.write(s.getBytes());
                                System.out.println(s.getBytes());
                 }
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

}

上面红色字体部分怎么起到的缓存作用啊!
还有那个while循环和字节转换String我输出s.getBytes时应该输出的不就是 读取进来的信息了么?可是不是呀?这个缓存把我弄晕了,我想把它拿掉可是以后要是碰见大一点的输入输出流我就没办法了。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

1 个回复

倒序浏览
将读取到的字符都存储到一个数组中,数组就是临时存储数据的容器,也就是相当于缓存了,否则的话就是读取一个写一个了 那样就没有缓存作用了
最后输出的确实就是你读取到的东西,但是你打印到控制台是看不到你写的东西的 你直接打印字符串就可以看到了,现在你写的是打印字节。
还有个问题 你创建目录和文件的过程放到循环外面,否则每次创建新的,那么你最后只有写到后面的那点东西了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马