Foros del Web » Programación para mayores de 30 ;) » Java »

Fallo leer archivo txt applet

Estas en el tema de Fallo leer archivo txt applet en el foro de Java en Foros del Web. Buenas! Les expongo mi problema: Tengo un Applet formado por un JApplet form (Formulario) y una clase de java (Conexion). La finalidad de este es ...
  #1 (permalink)  
Antiguo 09/09/2015, 10:37
 
Fecha de Ingreso: septiembre-2015
Mensajes: 4
Antigüedad: 8 años, 7 meses
Puntos: 0
Pregunta Fallo leer archivo txt applet

Buenas! Les expongo mi problema:

Tengo un Applet formado por un JApplet form (Formulario) y una clase de java (Conexion).
La finalidad de este es tomar datos de entrada, consultar a la base de datos y mostrar la información requerida.

Mi problema viene a la hora de leer un archivo txt que esta situado en un servidor, archivo al que accedo mediante una URL (http://www.******.com/varios/Conexion.txt). En dicho archivo se encuentra la configuración necesaria para realizar la conexión a la base de datos.

El caso es que el Applet lee bien todos los txt con los que he probado menos este que es el que necesito. Desde NetBeans lo lee bien, el problema es cuando subo el Applet al servidor me lee un archivo que ya no existe en vez de leer el nuevo.

Codigo de Formulario:

Código:
public class Formulario extends javax.swing.JApplet {

    Conexion co;
    String FechaIni, FechaFi;

    @Override
    public void init() {
        LOOK AND FELL SETTING CODE (OPTIONAL)

        /* Create and display the applet */
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                    setSize(492, 355);
                    Tabla.setAutoCreateRowSorter(true);
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

	@SuppressWarnings("unchecked")
	GENERATED CODE                      

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            DateFormat format = new SimpleDateFormat("dd-MM-yyyy");
            DateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
            if (FechaInicial.getText().isEmpty() || FechaFinal.getText().isEmpty()) {
                JOptionPane.showMessageDialog(null, "Rellene antes de consultar");
            } else if (FechaInicial.getText().matches("(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-[0-9]{4}") || FechaFinal.getText().matches("(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-[0-9]{4}")) {
                String dateini = FechaInicial.getText();
                Date Dateini = format.parse(dateini);
                FechaIni = formato.format(Dateini);

                String datefi = FechaFinal.getText();
                Date Datefi = format.parse(datefi);
                FechaFi = formato.format(Datefi);

                RellenaTabla(FechaIni, FechaFi);
            } else {
                JOptionPane.showMessageDialog(null, "Formato no valido. El formato es: dd-mm-yyyy");
                FechaInicial.setText("");
                FechaFinal.setText("");
            }
        } catch (HeadlessException headlessException) {
            JOptionPane.showMessageDialog(null, "Error al consultar datos");
        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(null, "Error al convertir String a Date");
        }
    }                                        

    private void FechaInicialMouseClicked(java.awt.event.MouseEvent evt) {                                          
        FechaInicial.setText("");
    }                                         

    private void FechaFinalMouseClicked(java.awt.event.MouseEvent evt) {                                        
        FechaFinal.setText("");
    }                                       

    public JTextField getFechaFinal() {
        return FechaFinal;
    }

    public void setFechaFinal(JTextField FechaFinal) {
        this.FechaFinal = FechaFinal;
    }

    public JTextField getFechaInicial() {
        return FechaInicial;
    }

    public void setFechaInicial(JTextField FechaInicial) {
        this.FechaInicial = FechaInicial;
    }

    public JTable getTabla() {
        return Tabla;
    }

    public void setTabla(JTable Tabla) {
        this.Tabla = Tabla;
    }


    // Variables declaration - do not modify                     
    private javax.swing.JTextField FechaFinal;
    private javax.swing.JTextField FechaInicial;
    private javax.swing.JTable Tabla;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration                   

    public void RellenaTabla(String FechaIni, String FechaFi) {
        co = new Conexion();
        try {
            ResultSet rs = co.getAnulaciones(FechaIni, FechaFi);

            ((DefaultTableModel) getTabla().getModel()).setRowCount(0);
            while (rs.next()) {
                Object new_row[] = {rs.getString("Of.Productora"), rs.getString("Familia"), rs.getInt("Anuladas")};
                ((DefaultTableModel) getTabla().getModel()).addRow(new_row);
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Error al rellenar la tabla");
        }
        co.Close();
    }

}
Codigo de Conexion:

Código:
public class Conexion {

    private static final String driver = "com.mysql.jdbc.Driver";
    BufferedReader br = null;
    ArrayList lineas = new ArrayList();

    Connection conexion = null;
    Statement statement;

    public Conexion() {
        try {
            LeerFichero();
            _initDB();
        } catch (InstantiationException ex) {
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void Close() {
        try {
            conexion.close();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "ERROR: Imposible de cerrar la conexi�n con la base de datos.", "Error con la Base de Datos", JOptionPane.ERROR_MESSAGE);
        }
    }

<<<Aqui van los ResultSet con las consultas, los quito por falta de caracteres>>>

    private void _initDB() throws InstantiationException, IllegalAccessException {
        try {
            Class.forName(driver).newInstance();
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "ERROR 1: Imposible de cargar el driver de conexi�n para la base de datos.", "Error de Conexi�n", JOptionPane.ERROR_MESSAGE);
        }
        try {

            String host2 = getServidor();
            String basedatos = getBBDD();
            String usuarioDB = getUsuario();
            String passwordDB = comprobarcontrasena();
            String servidor = host2 + "/" + basedatos;

            if (servidor != null || usuarioDB != null || passwordDB != null) {
                conexion = DriverManager.getConnection("jdbc:mysql://" + servidor + "?user=" + usuarioDB + "&password=" + passwordDB + "&useUnicode=true&characterEncoding=UTF-8");
            } else {
                JOptionPane.showMessageDialog(null, "Error al hacer conexion, valores nulos");
            }
        } catch (Exception e) {
            String error = e.getMessage();
            JOptionPane.showMessageDialog(null, error);
            JOptionPane.showMessageDialog(null, "ERROR 2: Imposible de conectar con la base de datos seleccionada.", "Error de Conexi�n", JOptionPane.ERROR_MESSAGE);
        }
    }

    public final void LeerFichero() {

        try {
            String Servidor = "http://www.******.com/varios/Conexion.txt";

            URL url = new URL(Servidor);
            br = new BufferedReader(new InputStreamReader(url.openStream()));

            String linea;
            while ((linea = br.readLine()) != null) {
            	lineas.add(linea);
            }

            br.close();

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al leer fichero");
            e.printStackTrace();
        }
    }

    public String getServidor() {
        try {
            String servidor = (String) lineas.get(0);
            return servidor;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Imposible leer servidor del fichero");
            return null;
        }
    }

    public String getUsuario() {
        try {
            String usuario = (String) lineas.get(2);
            return usuario;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Imposible leer usuario del fichero");
            return null;
        }
    }

    public String comprobarcontrasena() {
        if (getContrasena() == null) {
            String passwordDB = "";
            return passwordDB;
        } else if (getContrasena() != null) {
            String passwordDB = getContrasena();
            return passwordDB;
        } else {
            JOptionPane.showMessageDialog(null, "Error al comprobar la contraseña del fichero");
            return null;
        }
    }

    public String getContrasena() {
        try {
            String contraseña = (String) lineas.get(3);
            return contraseña;
        } catch (Exception e) {
            return null;
        }
    }

    public String getBBDD() {
        try {
            String base = (String) lineas.get(1);
            return base;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Imposible leer la base de datos del fichero");
            return null;
        }
    }
}
Contenido archivo Conexion.txt:

localhost =>Servidor
joomla =>Base de datos
root =>Usuario
=>Contraseña (En este caso nula)

Muchas gracias de antemano :D
  #2 (permalink)  
Antiguo 09/09/2015, 13:39
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Fallo leer archivo txt applet

Hola:

Antes de nada, el asunto tal cual lo planteas es inseguro. El fichero con la clave está accesible desde el exterior y el código del applet se puede descompilar para saber la URL donde está el fichero, por lo que se pueden sacar los datos de acceso a la base de datos. Lo normal es que el servidor ofrezca urls con parámetros POST para poder hacer acciones sobre la base de datos y sea el servidor el que se encargue de actuar con la base de datos, verificando previamente que se ha hecho un inicio de sesión válido y eso.

En cualquier caso, cuando dices que lee todos los ficheros que has probado menos ese... ¿te refieres a que lo lee bien cuando ejecutas en netbeans y no lo lee cuando subes el applet al servidor? ¿o te refieres a que subes el applet al servidor y unos ficheros los lee y otros no?

Entiendo que te sale el JoptionPane con "Error al leer fichero". Ayudaría si nos dijeras qué excepción da (detrás la estás sacando, pero no indicas cual es.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: applet, archivo.txt, fallo, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:30.