package com.stream.test;
import java.io.*;
public class TestFileOutStream { /**
 * @param args
 */
public static void main(String[] args) {
FileOutputStream out = null;
FileInputStream in =null;
try
{
in = new FileInputStream("F:/123/456.txt");
out = new FileOutputStream("F:/123/99999.txt");
}catch(FileNotFoundException ee)
{
System.out.println("没有文件");
System.exit(-1);
}
try
{ int num=0;
int b =0;
//byte[] by = new byte[1024];
//while((b=in.read(by))!=-1)
while((b=in.read())!=-1)/*我的456.txt存的是“张小凡”,然后这个in.read()一次读一个字节,所以在(1)处输出的是一群问号,但是为什么我在out.write()写进去完整的“张小凡”难道这里不是一个一个字节的读么void write(int c) 
          写入单个字符。 Api对于write()的说法是每次写进一个字符,但是我从b那一次只得了一个字节呀,求解,求解*/

{System.out.println(b);
//System.out.print(by);//这里怎么才能把里面的内容显示出来呀,又不能强制转化成char型,求解求解
System.out.print((char)b);//(1)输出结果:?197 ?208 ?161 ?183 ·178 ?0
out.write(b);
//num++;
}
in.close();
out.close();
System.out.println(num);//这里计数看它一共读了多少回,结果jvm给我输出个0
}catch(IOException e)
{
System.out.println("没有复制成功");
System.exit(-1);
}
}
}

解决方案 »

  1.   

    首先汉字是以字符为单位,也就是说一个汉字等于两个字节,在进行汉字操作的时候要使用字符流  而不是字节流。“System.out.print(by);//这里怎么才能把里面的内容显示出来呀,又不能强制转化成char型,求解求解”int型是可以硬转为char的,不过你的问题出在,转出来的没有任何意义,还是那句话  汉字是两个字节 你读取出一个字节转成char肯定什么都不是。//num++; 你注释了。
      

  2.   

    这问题要看你怎么想!!如果你单纯的想把文件复制到别一个地方是可以的!!用字节流就可以了!!
    但如果你要在复制的时候在控制台输出查看!!那你就应该用字符流! 
    OutputStreamWriter(OutputStream os)
    InputStreamReader(InputSteram in)
    这果一个思路!!要完整代码的话就是这样!!关键部分!没测试!FileInputStream fis=new FileInputStream("文件路径");
    InputStreamReader isr=new InputStreamReader(fis);
    int ch=isr.read();
    System.out.print((char)ch);