ayuda con archivos en java

Iniciado por andrex.125, 5 Diciembre 2013, 20:41 PM

0 Miembros y 1 Visitante están viendo este tema.

andrex.125

Hola a todos, tengo un problema con un programa que estoy implementando en java (trabajo de la universidad) lo que tiene que hacer el programa es leer un archivo nombres.txt, después de leer el archivo tengo que buscar un nombre en ese archivo, Si el nombre esta se tiene que copiar a otro archivo llamado Copia.txt, Si el nombre no esta solo tiene que volver a pedirlo. Ya implemente todos lo metodos pero no se me copia el nombre en el archivo Copia.txt. Gracias

Archivos3.java

import java.io.*;
import java.util.*;
import javax.swing.*;

public class Archivos3 {
static Vector nombres = new Vector();
static BufferedReader entrada;
static FileWriter salida =null;
static String nombreCopiar = null;
static String linea;
static File archivo = new File("src/archivos/nombres.txt");

    public static void main(String[] args) {
        leerArchivo(nombres);
        buscarNombre(nombres);
        copiaArchivo(nombres);

    }
     public static void copiaArchivo(Vector n){
       try {

            salida=new FileWriter("Copia.txt");
            if(buscarNombre(n)==1){
                salida.write(nombreCopiar);
               
            }
            else if (buscarNombre(n)==2){
                JOptionPane.showMessageDialog(null, "el nombre no se encuentra");
                buscarNombre(nombres);
            }
   
}catch (IOException ex) {
System.out.println(ex);
}finally{
//cerrar los flujos de datos
if(entrada!=null){
try{
entrada.close();
}catch(IOException ex){}
}
if(salida!=null){
try{
salida.close();
}catch(IOException ex){}
}
System.out.println("el bloque finally siempre se ejecuta");
}

try {
//espera la pulsación de una tecla y luego RETORNO
System.in.read();
}catch (Exception e) {
}
}

     
    //leo el archivo y lo meto en un Vector
    public static void leerArchivo(Vector n)  {
        try {
        entrada = new BufferedReader(new FileReader(archivo));
        while (entrada.ready()) {
        linea = entrada.readLine();
         n.add(linea);
         }
         }catch (IOException ex) {
    System.out.println(ex);
        } finally {
//cerrar los flujos de datos
            if (entrada != null) {
                try {
                    entrada.close();
                } catch (IOException ex) {
                }
            }
            System.out.println("el bloque finally siempre se ejecuta");
        }
    }
    //busco en el Vector si el nombre se encuentra
  public static int buscarNombre(Vector n){
        String x = JOptionPane.showInputDialog(null, "ingrese el nombre");
        int c = 0;
        try {
            int pos = n.indexOf(x);
            if (x.equals(n.elementAt(pos)) && (pos > -1)) {
                System.out.println(n.elementAt(pos));
                nombreCopiar = (String) n.elementAt(pos); //hago casting para pasar de objeto a String.
                c=1;
                 
            }
            else{
                nombreCopiar = null;
                 c=2;
            }
        } catch (Exception e) {
            System.out.println("nombre no esta");
           
        }
       
        return c;
       
}
    }

Danyfirex

Hola no se java pero me parece que puedes hacer algo mas simple.

Código (java) [Seleccionar]

 String nombre = JOptionPane.showInputDialog(null, "ingrese el nombre");
   File file = new File("File.txt");
   FileInputStream fis = new FileInputStream(file);
   byte[] data = new byte[(int)file.length()];
   fis.read(data);
   fis.close();

   //
   String filestr = new String(data, "UTF-8");

if filetr.indexOf(nombre) {

PrintWriter writer = new PrintWriter("copia.txt", "UTF-8");
writer.println("nombre);
writer.close();
}



PD: el código no es funciona. solo es una idea.


saludos

ThinkByYourself

#2
A lo mejor este breve código te puede ayudar.
Código (java) [Seleccionar]

String s_origen = "/home/universitariosQueNoSabenBuscarEnGoogle/ficheroOrigen.txt", s_destino = "/home/universitariosQueNoSabenBuscarEnGoogle/ficheroDestino.txt";
try {String linea="", contenido="", cosaquequierebuscar="a saber";
FileWriter escritor;
while((linea = new BufferedReader(new InputStreamReader(new FileInputStream(new File(s_origen)))).readLine() ) != null) {contenido += linea;}
if(contenido.indexOf(cosaquequierebuscar) != -1) {(escritor = new FileWriter(new File(s_destino))).write(cosaquequierebuscar);escritor.close();}
}catch(Exception ex) {System.out.println("Algo falló");}
}

No lo he probado, puede que no funcione del todo, o que no haga lo que quieres. En fin.
Un saludoooo
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.

lagg

#3
Todavía estoy empezando asi que perdonar si digo alguna tonteria  :P
¿Porque al leer el fichero si entrada es distinto de null cierras el flujo? no seria if (entrada==null)?

if (entrada != null) {
                try {
                    entrada.close();
                } catch (IOException ex) {
                }
            }

Otra cosa como guardas los nombre en tu archivo nombres.txt?

Leyer

@lagg

Esta haciendo la comprobación de que entrada!=null,por que si entrada es distinto de null quiere decir que el archivo se ha podido leer correctamente y no a habido problemas, y como ya se abrieron los flujos I/O se procede a cerrar el flujo.