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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯建鹏 黑马帝   /  2012-3-26 16:42  /  2342 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//将C盘一个文本文件复制到D盘。

/*
复制的原理:
其实就是将C盘下的文件数据存储到D盘的一个文件中。

步骤:
1,在D盘创建一个文件。用于存储C盘文件中的数据。
2,定义读取流和C盘文件关联。
3,通过不断的读写完成数据存储。
4,关闭资源。
*/

import java.io.*;

class CopyText
{
        public static void main(String[] args) throws IOException
        {
                copy_1();
        }


       

        //从C盘读一个字符,就往D盘写一个字符。
        public static void copy_1()throws IOException
        {
                //创建目的地。
                FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");

                //与已有文件关联。
                FileReader fr = new FileReader("RuntimeDemo.java");

                int ch = 0;

                while((ch=fr.read())!=-1)                {
                        fw.write(ch);
                }
               
                fw.close();
                fr.close();

        }


}

//fr.read()方法返回的是数字,赋值给ch,然后代码块中的fw.write(ch)写进去的应该是数字吧,怎么就把那个文件里面的给复制到另一个文件里面了呢,我看了write方法但是里面也没写怎么个情况,就说传递的是    写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。

4 个回复

倒序浏览
我也在看这里,不过还没注意到这个问题呢。
fr.read()方法返回的是数字,赋值给ch,我看了下fw.write()方法接收的也是int型如下:
public void write(int c)
           throws IOException写入单个字符。
覆盖:
类 Writer 中的 write
参数:
c - 指定要写入字符的 int。

因此是不是java底层给他们进行了相应的从字符到数字又从数字到字符的转化呢?
我也不太清楚,坐等高人专业解答吧。
回复 使用道具 举报
klas2008 发表于 2012-3-26 17:06
我也在看这里,不过还没注意到这个问题呢。
fr.read()方法返回的是数字,赋值给ch,我看了下fw.write()方法 ...

嗯 我就是不明白那个write方法 传递进去的是int类型的就直接把原文件给输出了,是什么原理?内部强转?不清楚:'(
回复 使用道具 举报
write()写入的整数是字符编码,你直接写入整数ch也行,或者直接(char)ch转换成字符也行,虚拟机会识别并对需要转换的整数做转换动作,我是这么想的!
回复 使用道具 举报
字符流 的读和写 都是基于字节流的  因为把数据存储在硬盘上最终存储的是字节码文件
而你用字符流读和取   内部会有一个转换的过程  把字节码文件转换成字符形式  所以说字符流是后来才出来了   
  read方法读取字符 返回的事这个字符在ascII码表中的字符对应的数字,比如a对应的事97
   如果读到最后没有字符了返回-1     而你把read() 返回的数字赋值给ch  那么ch肯定是一个数字
write写的时候当然是一个数字了   要想让他输出时字符 把它强制转换一下即可  即    fw.write((char)ch)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马