在Java中使用DataOutputStream可以提供一些中文输出

时间:2017-09-19 07:07:41

标签: java string file-io utf

我今天在Java中使用DataOutputStream,但它给了我一个中文输出,这绝对不是我的预期......有人可以在代码中发现错误吗?

private void generateButtonActionPerformed(java.awt.event.ActionEvent evt) {
    textToSet="       Student Information";
    textToSet=textToSet+"\nName\t: "+TitleBox.getSelectedItem()+" "+FirstNameField.getText()+" "+LastNameField.getText();
    textToSet=textToSet+"\nClass\t: "+ClassField.getText();
    TextArea.setText(textToSet);
}

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    try{
        File f=new File("C:\\Users\\username\\Desktop\\ID Card.txt");
        DataOutputStream fs=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
        fs.writeUTF(textToSet);
        Desktop d=Desktop.getDesktop();
        d.open(f);
        fs.close();
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

TitleBoxJComboBoxFirstNameFieldLastNameFieldClassFieldJTextField&#39}。 TextAreaJTextArea

当我选择" Mr。"在TitleBox中输入" Man"在FirstNameField," Ly"在LastNameField和"第7"在ClassField中,我得到了输出:

       Student Information
Name    : Mr. Man Ly
Class   : 7th

在TextArea中,但在文件IDCard.txt中,我得到了输出:

㠀†††匠畴敤瑮䤠普牯慭楴湯上浡॥›牍‮慍祌䌊慬獳㨉㜠桴

textToSet是在公共范围内定义的String变量...有人能指出我正确的方向吗? writeUTF()代码有问题吗?

1 个答案:

答案 0 :(得分:6)

writeUTF方法包括标题数据(您所谓的中文字符),表示它要写入的字符串的长度(2个字节,所以0-65535)。您只能使用readUTF正确读取该数据,而不是用于一般文本编写。

只需使用常规BufferedWriter.write(String str)来编写文本。