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;
}
}
Hola no se java pero me parece que puedes hacer algo mas simple.
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
A lo mejor este breve código te puede ayudar.
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
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?
@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.