你想转码?我试了一下,不知是不是你想要的结果。我没有转码,也没有作任何处理,可以读出big5的文件,也可以写入big5的文件。下面是源码,其中test.txt是一个big5编码的文本文件。
package hztest;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;import java.io.*;public class Frame1 extends JFrame {
  JPanel contentPane;
  JTextArea jTextArea1 = new JTextArea();
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();  /**Construct the frame*/
  public Frame1() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  /**Component initialization*/
  private void jbInit() throws Exception  {
    jTextArea1.setBounds(new Rectangle(16, 11, 272, 166));
    //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
    contentPane = (JPanel) this.getContentPane();
    contentPane.setLayout(null);
    this.setSize(new Dimension(400, 300));
    this.setTitle("Frame Title");
    jButton1.setText("read");
    jButton1.setBounds(new Rectangle(13, 200, 89, 30));
    jButton1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jButton1_actionPerformed(e);
      }
    });
    jButton2.setText("save");
    jButton2.setBounds(new Rectangle(121, 200, 82, 30));
    jButton2.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jButton2_actionPerformed(e);
      }
    });
    contentPane.add(jTextArea1, null);
    contentPane.add(jButton1, null);
    contentPane.add(jButton2, null);
  }
  /**Overridden so we can exit when window is closed*/
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }  void jButton1_actionPerformed(ActionEvent e) {
    try{
      BufferedReader in = new BufferedReader(new FileReader("test.txt"));
      String s;
      while( (s=in.readLine())!=null ){
        jTextArea1.append(s);
        jTextArea1.append(System.getProperty("line.separator"));
        System.out.println(s);
      }
     }catch(Exception ex){
      System.out.println(ex.getMessage());
     }
  }  void jButton2_actionPerformed(ActionEvent e) {
    try{
      PrintWriter out = new PrintWriter(new FileWriter("test2.txt"));
      out.println(jTextArea1.getText());
      System.out.println(jTextArea1.getText());
      out.close();
     }catch(Exception ex){
      System.out.println(ex.getMessage());
     }  }
}

解决方案 »

  1.   

    我一直认为中文问题和平台有很大关系,
    FileWriter.write(new string(string_code, "BIG5"("Big5"我也用过));
    你试试再写入的时候不作转码!
      

  2.   


    to ksxy:我一直不知道你的问题到底是什么?我测试的结果是可以打开一个big5的文本文件,你测试一下可以吗?
    如果可以,再试一下保存一段big5的文本,是否可以?有空交流吧。
      

  3.   

    现在问题是打开不出错,而保存就惨了。读入的时候是转为BIG5的,可以显示;而保存的时候,不论是否转过码,下次再打开库文件,读出来就是乱码了。
      

  4.   


    好了,刚才是我弄错了,我系统的编码不对。现在我测试完成,应是这样的:读入时,用
    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("test3.txt"),"Big5"));test3.txt是一个big5编码的文本文件。读入后不用再转码了。输出时,用
    PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("test4.txt"),"Big5"));这样输出的test4.txt的编码也是big5了,如果你不这样输出,它会变成gb2312,因为我的默认编码是gb2312。问题解决,给分吧!!!
      

  5.   

    不大对劲……sharetop(天生很笨) 可否借源码一观,另外,敢问兄台的系统为何,多谢~分的问题,我从来不食言~
      

  6.   


    我是win2000pro,版,默认编码是中文(简体)。我先改成中文繁体,做了一个文件,输入了几个汉字。保存成test3.txt文件,把系统改回成简体,然后直接看这个文件,发现乱码,因为它是big5码的,然后我用下面的程序打开它,直接显示是可以的,在保存时也做了处理,生成的test4.txt也是乱码,但是与test3是一样的乱,所以说明仍是big5码没错。我的源码是这个:package hztest;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;import java.io.*;public class Frame1 extends JFrame {
      JPanel contentPane;
      JTextArea jTextArea1 = new JTextArea();
      JButton jButton1 = new JButton();
      JButton jButton2 = new JButton();  /**Construct the frame*/
      public Frame1() {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      /**Component initialization*/
      private void jbInit() throws Exception  {
        jTextArea1.setBounds(new Rectangle(16, 11, 272, 166));
        //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
        contentPane = (JPanel) this.getContentPane();
        contentPane.setLayout(null);
        this.setSize(new Dimension(400, 300));
        this.setTitle("Frame Title");
        jButton1.setText("read");
        jButton1.setBounds(new Rectangle(13, 200, 89, 30));
        jButton1.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jButton1_actionPerformed(e);
          }
        });
        jButton2.setText("save");
        jButton2.setBounds(new Rectangle(121, 200, 82, 30));
        jButton2.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jButton2_actionPerformed(e);
          }
        });
        contentPane.add(jTextArea1, null);
        contentPane.add(jButton1, null);
        contentPane.add(jButton2, null);
      }
      /**Overridden so we can exit when window is closed*/
      protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
          System.exit(0);
        }
      }  void jButton1_actionPerformed(ActionEvent e) {
        try{
    //      BufferedReader in = new BufferedReader(new FileReader("test3.txt"));
          BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("test3.txt"),"Big5"));
          String s;
          while( (s=in.readLine())!=null ){
    //        s = new String(s.getBytes("BIG5"),"GB2312");
            jTextArea1.append(s);
            jTextArea1.append(System.getProperty("line.separator"));
            System.out.println(s);
          }
         }catch(Exception ex){
          System.out.println(ex.getMessage());
         }
      }  void jButton2_actionPerformed(ActionEvent e) {
        try{
    //      PrintWriter out = new PrintWriter(new FileWriter("test4.txt"));
          PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("test4.txt"),"Big5"));
          out.println(jTextArea1.getText());
          System.out.println(jTextArea1.getText());
          out.close();
         }catch(Exception ex){
          System.out.println(ex.getMessage());
         }  }
    }=======================================
    package hztest;import javax.swing.UIManager;
    import java.awt.*;public class Application1 {
      boolean packFrame = false;  /**Construct the application*/
      public Application1() {
        Frame1 frame = new Frame1();
        //Validate frames that have preset sizes
        //Pack frames that have useful preferred size info, e.g. from their layout
        if (packFrame) {
          frame.pack();
        }
        else {
          frame.validate();
        }
        //Center the window
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
          frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
          frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        frame.setVisible(true);
      }
      /**Main method*/
      public static void main(String[] args) {
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e) {
          e.printStackTrace();
        }
        new Application1();
      }
    }
      

  7.   

    不要直接写字符串,因为写到GB码的系统中会认为写入的是GB码的字符串,当然乱码,应该象读入时一样转换为相应编码的字节码(GB或BIG5)再写入文件.
    如果正确,别忘了给分哦...
      

  8.   


    楼上说的对,如果我在写出时不做这样的处理:
    PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("test4.txt"),"Big5"));虽然生成的文件也看上去是繁体,但其实是gb2312的编码,也就是说在gb2312下可正常显示的繁体。
    做了处理,强制转成了big5,生成的文件在gb2312下就显示乱码了。
      

  9.   

    不是这样写的写的时候:
    String str = "中國";
    FileOutputStream fileOut = new FileOutputStream("C:\\1.txt");
    fileOut.write(str.getBytes("BIG5"));
    这样将把一个大五码的数据写进文件。读的时候:
    FileInputStream fileIn = new FileInputStream("C:\\1.txt");
    byte[] btarr = new byte[fileIn.avaliable()];
    fileIn.read(btarr);
    String str = new String(btarr, "BIG5");没有测试,你试试吧。
      

  10.   


    kiddycoffee这种写法真的不行的!我试过。只能用 改变*流*的编码 的方式实现!!!!不是 改变*字串*的编码 !!!