小弟最近初学java I/O  遇到这样一个问题 代码如下:
import java.io.*;
/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
class Fin
{
public Fin()
{
try
{
FileInputStream f1=new FileInputStream("E:\\项目开发\\mycx\\IOputTest\\1.txt");
int Reasult;
while((Reasult=f1.read())!=-1)

   System.out.print((char)Reasult);
}
f1.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
public class InPutTest { public static void main(String[] args) 
{
Fin f=new Fin();
    }
}
//////////////////////////////////////
E:\项目开发\mycx\IOputTest\1.txt  的内容是 “123123123123你好”
但是结果输出的是 “123123123123????”
为什么中文部分变成了问号呢?
还有 在“FileInputStream f1=new FileInputStream("E:\\项目开发\\mycx\\IOputTest\\1.txt");”中必须写绝对路径(windows)相对路径出错找不到文件,这又是怎么回事啊?
请问怎么才能输出中文呢? 谢谢

解决方案 »

  1.   

    try
    {
    StringBuffer buffer= new StringBuffer(2048);
    String output ="";
    FileInputStream f1=new FileInputStream("E:\\项目开发\\mycx\\IOputTest\\1.txt");
    int Reasult;
    while((Reasult=f1.read())!=-1)

       //System.out.print((char)Reasult);
                                   buffer.append((char)Reasult);
                                   
    }
                               outpub = new String (buffer.tostring,"gbk")
    f1.close();
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
      

  2.   

    outpub = new String (buffer.tostring(),"gbk");
      

  3.   

    一个汉字占两个(char)字节的。而输出是一个字节一个字节的输出,当然不能显示。
      

  4.   

    outpub = new String (buffer.tostring().getBytes("ISO8859-1"),"GBK");
      

  5.   

    try{   
           FileReader fr = new FileReader("D:\\myjava.txt");
           BufferedReader bw  = new BufferedReader(fr);     
           int Reasult;
           try{
              aa = bw.readLine();
              System.out.print(aa);
     }
          catch(Exception e)
          {   }
        
          while(( aa = bw.readLine())!= null)
         { 
            System.out.print(aa);
          }
         
          fr.close();
        }
      catch(IOException e)
      {
        e.printStackTrace();
      }