feed twitter facebook LinkedIn facebook

Java » Escribir en un fichero de texto con Java

Febrero 6, 2008 por Víctor Cuervo . 46685 visitas 43 Comentarios Imprimir Imprimir

Si vamos a escribir en un fichero de texto, sería una buena práctica el validar si dicho fichero existe o no. También podríamos escribir sobre el fichero directamente. Ahora que esto lo haríamos si no nos importase mucho el contenido que este tuviese.

Para validar si existe un fichero podemos leer el ejemplo Saber si existe un fichero con Java. Dicho artículo nos explica de forma detallada lo simple que esto resulta.

Resumiendo, bastará utilizar el método exists() de la clase File.

  1. String sFichero = "fichero.txt";
  2. File fichero = new File(sFichero);
  3.  
  4. if (fichero.exists()) {...}

En el caso de que no exista el fichero, nos pondremos manos a la obra para escribir sobre el fichero.

Lo primero que tendremos que hacer será crear un BufferedWriter. Esta clase nos ayuda a manejar los stream en forma de buffer con métodos muy sencillos. Este buffer necesitará saber cual es el fichero. Esto se lo proporcionamos desde la clase FileWriter.

Recuerda que la filosofía de acceso a la lectura y escritura a los ficheros, siempre es la misma. Buffer, que envuelve a Reader, que a su vez envuelve al fichero (o stream).

El código nos quedaría algo así:

  1. BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero));

Para escribir texto nos apoyamos en el método .write() del buffer. Muy sencillo. La verdad es que no se me ocurría que texto grabar sobre el fichero, a si que, al final, vamos a volcar 10 líneas iguales ayudándonos de un bucle for.

  1. for (int x=0;x<10;x++)
  2. bw.write("Fila numero " + x + "\n");

No nos podemos olvidar de dos últimas cosas. Siempre que manejemos el fichero para escribir deberemos de cerrarle con el método .close().

Y lo otro, que toda la operativa de la clase java.io.* nos avisará de sus problemas de acceso a fichero, elevándonos una excepción IOException. Que habrá que capturar en alguna parte de nuestro código.

Visualizar el ejemplo | Descargar el código

Foro sobre Java IO
Foro sobre Java IO
tags: , , , , , , , ,

Artículos relacionados:

43 comentarios »

Redifusión RSS de los comentarios de la entrada. TrackBack URI

1 2 3 4 5
  1. igniz
    Julio 7, 2009 #

    estoy insertando en el fichero creado una lista con las tablas de una base de datos pero solo me inserta la ultima linea
    alguien ayudeme

  2. lineadecodigo
    Julio 21, 2009 #

    @igniz,

    Pon tu código en el foro de Java File a ver si podemos ayudarte…

  3. igniz
    Julio 22, 2009 #

    el codigo es este

    public void run()
    {

    {
    //String driver = “org.postgresql.Driver”;
    String driver = “com.microsoft.sqlserver.jdbc.SQLServerDriver”;

    //String driver = “.:/usr/share/java/postgresql.jar”;
    String connectString = “jdbc:sqlserver://localhost;databaseName=MUDANZA;”;
    String user = “sa”;
    String password = “pereza”;

    try{
    Class.forName(driver);
    Connection con = DriverManager.getConnection(connectString, user , password);
    Statement stmt = con.createStatement();

    stmt=con.createStatement();
    stmt.execute(“use MUDANZA”);

    ResultSet rs = stmt.executeQuery(“select TABLE_NAME from information_schema.tables ORDER BY TABLE_NAME “);
    while (rs.next()){

    String nombre = rs.getString( “TABLE_NAME” );

    System.out.println(“127.0.0.1 ” + nombre);

    }

    stmt.close();
    con.close();

    Scanner scaner = new Scanner(System.in);
    String texto = scaner.next();
    while (texto != null){

    texto = texto + “\n”;
    String sFichero = “C:\\fichero.txt”;
    File fichero = new File(sFichero);

    BufferedWriter bw = new BufferedWriter(new FileWriter(fichero, false));
    bw.write(texto);

    }

    }

    catch ( Exception e ){
    System.out.println(e.getMessage());
    }}

  4. lineadecodigo
    Julio 22, 2009 #

    @igniz,

    Es que lo que estás volcando al fichero es lo que estás pidiendo por consola…

    String texto = scaner.next();

    Si quieres volcar el contenido del ResultSet tendrás que hacer el volcado al fichero dentro del bucle que lo recorre…

    BufferedWriter bw = new BufferedWriter(new FileWriter(fichero, false));
    while (rs.next()){
    String nombre = rs.getString(“TABLE_NAME”);
    bw.write(nombre);
    }

    Espero que te ayude la respuesta…

  5. lineadecodigo
    Agosto 24, 2009 #

    @Asereje,

    Lo que necesitas lo encuentras en el artículo Pagina Web para descargar archivos.

    Espero que te sea de ayuda.

  6. DAMR1990
    Diciembre 6, 2009 #

    Hola, quisiera saber si hay alguna manera añadir texto a una linea ya existente en vez de añadirlo hasta el final
    p. eh

    1 ab
    2 cd
    3 ef

    y quisiera agregarle un tramo adicional a la linea dos para que quede

    1 ab
    2 cdgh
    3 ef

  7. green31
    Diciembre 18, 2009 #

    hoola! mi problema es este,
    tengo ke enviar una dato, un nombre por ejemplo a una tabla en java
    jTable,
    eso desde un archivo txt. Ya para despues de agregadoa la tabla, modificarlo.
    Me serviria mucho tu respuesta.
    Tengo mucho tiempo sin poder.
    Por tu ayuda gracias!!!

  8. ronald
    Marzo 11, 2010 #

    hola, gracias por sus cometarios al leerlos despeje una duda que tenia

  9. Enrique
    Marzo 24, 2010 #

    Hola, estoy tratando de leer desde un txt BIEN EXTENSO, hacer unas modificaciones de esos datos y escribirlos a otro txt con el formato que deseo, el problema ocurre cuando ya ha escrito aproximado 2000 lineas y me aparece este error.

    run:
    Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1938)
    at bddigitalizacion.Main.main(Main.java:50)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)

    les adjunto el código.

    import java.io.*;
    public class Main
    {
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args)
    {
    try
    {
    //Abrimos el archivo del cual extraeremos los datos
    BufferedReader in = new BufferedReader(new FileReader(“C:\\Clientes.txt”));
    //Creamos el archive destino
    BufferedWriter out = new BufferedWriter(new FileWriter(“C:\\ClientesSQL.txt”));

    //Leemos línea por línea el archivo origen
    String p = System.getProperty(“line.separator”);
    String s = in.readLine();
    int puntoComa;
    String numero;
    String cedula;
    String fecha;
    String dia;
    String mes;
    String año;
    if (s != null)
    {
    while ((s = in.readLine()) != null)
    {
    puntoComa=s.indexOf(“;”);
    numero=s.substring(0, puntoComa);
    s=s.substring(puntoComa+1);
    puntoComa=s.indexOf(“;”);
    cedula=s.substring(0, puntoComa);
    s=s.substring(puntoComa+1);
    puntoComa=s.indexOf(“-”);
    dia=s.substring(0,puntoComa);
    s=s.substring(puntoComa+1);
    puntoComa=s.indexOf(“-”);
    mes=s.substring(0, puntoComa);
    s=s.substring(puntoComa+1);
    año=s;
    fecha=(año+”-”+mes+”-”+dia);
    //System.out.println(numero);
    //System.out.println(cedula);
    //System.out.println(fecha);
    //Escribimos cada línea en el archivo destino
    out.write(“(‘”+numero+”‘, ‘”+cedula+”‘, ‘”+fecha+”‘),”+p);
    }
    }
    out.close();
    in.close();
    }
    catch (IOException ex)
    {
    }
    }
    }

  10. Enrique
    Marzo 25, 2010 #

    Disculpen, ya logre solucionar… El error se encontraba en el aarchivo ya que no se encontraba los datos de la fecha… y al buscar encontraba que no habia nada…Asi que ahora funciona perfectamente

1 2 3 4 5

Deje un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*