0

カスタムXMLエディターを作成しています。私のxmlファイルには、¦•¥‡§などの特別な区切り文字がたくさん含まれています。しかし、ファイルを読み取ってJEditorPaneで表示すると、ファイルは読み取られず、•for•やいくつかの奇妙な文字などの他の何かが表示されます。では、ファイルをそのまま読み取って表示するにはどうすればよいでしょうか。以下は、ファイルを開くために私が書いたコードです。

void openFile(){
   BufferedReader br;
   try{
      File file=open.getSelectedFile();    
      br=new BufferedReader(new FileReader(file));
      StringBuffer content=new StringBuffer("");
      String line="";
      while((line=br.readLine())!=null){
         content.append(line+"\n");
       }
      br.close();
      getEditorPane().setText(content.toString());
      getEditorPane().setCaretPosition(0);
      edit_tab.setTitleAt(edit_tab.getSelectedIndex(),file.getName());
      fileNames.put(edit_tab.getSelectedIndex(),open.getSelectedFile().toString());
      tab_title[edit_tab.getSelectedIndex()]=file.getName();
   }
   catch(Exception e){
       JOptionPane.showMessageDialog(this,"Error reading file","READ ERROR",JOptionPane.ERROR_MESSAGE);
   }
}

ありがとう...

4

2 に答える 2

1

エンコーディングを設定する正しい方法は、FileInputStreamとInputStreamReaderを使用してファイルを読み取ることです。ここで、InputStreamReaderのコンストラクターでエンコーディングを次のように設定できます。

        InputStreamReader is;
        FileInputStream fs;
         try{
                File file=open.getSelectedFile();   
                fs=new FileInputStream(file);
                is=new InputStreamReader(fs,"UTF-8");
                br=new BufferedReader(is);
                StringBuffer content=new StringBuffer("");
                String line="";
                while((line=br.readLine())!=null){
                   content.append(line+"\n");
                 }
                br.close();
                getEditorPane().setText(content.toString());
          }
          catch(Exception e){

          }
于 2010-10-15T12:40:09.233 に答える
1

「このクラスのコンストラクタは、デフォルトの文字エンコーディングとデフォルトのバイトバッファサイズが適切であると想定しています。これらの値を自分で指定するには、 で を構築しますInputStreamReaderFileInputStream」—<a href="http://download.oracle.com/ javase/6/docs/api/java/io/FileReader.html" rel="nofollow"> FileReader. ファイルのエンコーディングを指定する必要がある場合があります。

于 2010-10-13T14:29:39.963 に答える