Problemas con ficheros
Publicado por Jin (3 intervenciones) el 25/07/2007 18:30:47
Hola a todos.
Bueno, pues resulta que tengo un pequeño problema. Tengo una aplicación en la cual tengo un JEditorPane en el que cargo mediante URL un documento HTML que está codificado en UTF-8, al igual que el documento java.
El caso es que el documento se carga y se lee perfectamente, pero al guardarlo en un fichero, me realiza el almacenamiento bajo codificación ANSI, con lo cual, los caracteres especiales no se ven.
Mi pregunta es: ¿Cómo puedo hacer para forzar a que guarde el fichero en UTF-8?
Os dejo aquí el código:
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class P extends JDialog implements ActionListener
{
private JButton Volver,Guardar;
private JScrollPane scroll;
private JEditorPane html;
public P()
{
setTitle("Prueba Guardar"); //TÃtulo
setSize(800,600); //Tamaño
setResizable(false); //No redimensionar la ventana
setLocationRelativeTo(null); //Centrar Ventana
getContentPane().setLayout(null); // sin adminitrador de diseño
IniciarComponentes();
//Hacer visible la ventana
setVisible(true);
}
public void IniciarComponentes()
{
//Creación de los botones
Guardar=new JButton("Guardar");
Guardar.addActionListener(this); //añadirle el oyente
Guardar.setBounds(105,510,100,50);
getContentPane().add(Guardar); //añadirlo
Volver=new JButton("Volver");
Volver.addActionListener(this); //añadirle el oyente
Volver.setBounds(345,510,100,50);
getContentPane().add(Volver);
//Creacion del Scroll y etiqueta html
html=new JEditorPane();
scroll=new JScrollPane(html);
html.setContentType("text/html"); // indica que el tipo de texto que contiene es html
html.setEditable(false); // texto no editable
//Cargar la página que corresponde
this.CargarPag();
getContentPane().add(scroll);
scroll.setBounds(5,5,785,500); // establece la posición del scroll con los dos primeros parámetros y su tamaño con los dos últimos
}
//Implementación del ActionListener (Oyente de Acciones) de la clase
public void actionPerformed(ActionEvent ev)
{
if(ev.getSource()==Volver)
{
/*this.setVisible(false);
Padre.setVisible(true);*/
}
else if(ev.getSource()==Guardar)
{
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
String nombreArchivo = chooser.getSelectedFile().getPath();
try
{
File file = new File (nombreArchivo);
int valor;
//Object[] valores={"Si","No","Cancelar"};
if(file.exists())
{
valor=JOptionPane.showConfirmDialog(this,"El archivo ya existe.\n ¿Deseas sobrescribirlo?","TÃtulo",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(valor==0) //Quiero sobreescribir
{
/*FileWriter out = new FileWriter(file);
String text = html.getText();
out.write(text);
out.close();*/
FileWriter out = new FileWriter(file);
out.write(html.getText());
out.close();
}
}
else
{
/*FileWriter out = new FileWriter(file);
String text = html.getText();
out.write(text);
out.close();*/
FileWriter out = new FileWriter(file);
out.write(html.getText());
out.close();
}
}
catch (IOException e1)
{
JOptionPane.showMessageDialog(this, "No se Pudo Guardar '" +nombreArchivo + "'","Error de Escritura",JOptionPane.ERROR_MESSAGE);
}
}
}
}
//Implementación del método que carga páginas
private void CargarPag()
{
java.net.URL ruta;
ruta=P.class.getResource("P1.html");
try
{
html.setPage(ruta);
}
catch(java.io.IOException e)
{
JOptionPane.showMessageDialog(this,
"No se ha podido conectar con la página.\n",
"Error",JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String argv[])
{
new P();
}
}
Gracias de antemano.
Bueno, pues resulta que tengo un pequeño problema. Tengo una aplicación en la cual tengo un JEditorPane en el que cargo mediante URL un documento HTML que está codificado en UTF-8, al igual que el documento java.
El caso es que el documento se carga y se lee perfectamente, pero al guardarlo en un fichero, me realiza el almacenamiento bajo codificación ANSI, con lo cual, los caracteres especiales no se ven.
Mi pregunta es: ¿Cómo puedo hacer para forzar a que guarde el fichero en UTF-8?
Os dejo aquí el código:
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class P extends JDialog implements ActionListener
{
private JButton Volver,Guardar;
private JScrollPane scroll;
private JEditorPane html;
public P()
{
setTitle("Prueba Guardar"); //TÃtulo
setSize(800,600); //Tamaño
setResizable(false); //No redimensionar la ventana
setLocationRelativeTo(null); //Centrar Ventana
getContentPane().setLayout(null); // sin adminitrador de diseño
IniciarComponentes();
//Hacer visible la ventana
setVisible(true);
}
public void IniciarComponentes()
{
//Creación de los botones
Guardar=new JButton("Guardar");
Guardar.addActionListener(this); //añadirle el oyente
Guardar.setBounds(105,510,100,50);
getContentPane().add(Guardar); //añadirlo
Volver=new JButton("Volver");
Volver.addActionListener(this); //añadirle el oyente
Volver.setBounds(345,510,100,50);
getContentPane().add(Volver);
//Creacion del Scroll y etiqueta html
html=new JEditorPane();
scroll=new JScrollPane(html);
html.setContentType("text/html"); // indica que el tipo de texto que contiene es html
html.setEditable(false); // texto no editable
//Cargar la página que corresponde
this.CargarPag();
getContentPane().add(scroll);
scroll.setBounds(5,5,785,500); // establece la posición del scroll con los dos primeros parámetros y su tamaño con los dos últimos
}
//Implementación del ActionListener (Oyente de Acciones) de la clase
public void actionPerformed(ActionEvent ev)
{
if(ev.getSource()==Volver)
{
/*this.setVisible(false);
Padre.setVisible(true);*/
}
else if(ev.getSource()==Guardar)
{
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
String nombreArchivo = chooser.getSelectedFile().getPath();
try
{
File file = new File (nombreArchivo);
int valor;
//Object[] valores={"Si","No","Cancelar"};
if(file.exists())
{
valor=JOptionPane.showConfirmDialog(this,"El archivo ya existe.\n ¿Deseas sobrescribirlo?","TÃtulo",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(valor==0) //Quiero sobreescribir
{
/*FileWriter out = new FileWriter(file);
String text = html.getText();
out.write(text);
out.close();*/
FileWriter out = new FileWriter(file);
out.write(html.getText());
out.close();
}
}
else
{
/*FileWriter out = new FileWriter(file);
String text = html.getText();
out.write(text);
out.close();*/
FileWriter out = new FileWriter(file);
out.write(html.getText());
out.close();
}
}
catch (IOException e1)
{
JOptionPane.showMessageDialog(this, "No se Pudo Guardar '" +nombreArchivo + "'","Error de Escritura",JOptionPane.ERROR_MESSAGE);
}
}
}
}
//Implementación del método que carga páginas
private void CargarPag()
{
java.net.URL ruta;
ruta=P.class.getResource("P1.html");
try
{
html.setPage(ruta);
}
catch(java.io.IOException e)
{
JOptionPane.showMessageDialog(this,
"No se ha podido conectar con la página.\n",
"Error",JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String argv[])
{
new P();
}
}
Gracias de antemano.
Valora esta pregunta


0