Thursday, September 3, 2015

How to create plain files in Java

How to create plain files in Java

In this section we will show a simple way to create a text file using Java. We use common tools such as Eclipse IDE Luna and JDK 1.7 running in a Windows 10 PC.

1. Go to option File->New then in the popup en la window lookup for Java Project select and then click in  "Next >"

2. You should assign a new name to the project,in our case we will use "ArchivosPlanos", Eclipse give you options to change virutal machine version and directories, at this moment we will continue with default values, to continue click in "Finish" button.
Setteo de un nuevo proyecto
3. Eclipse was created a new project with the following structure:
Estructura del nuevo proyecto
4. Now right click in folder src and then select the option New->Package, Eclise will ask to input the name of the package to use, we will use co.net.seft.entrenamiento.archivosplanos then click in "Finish" button
Creando un nuevo paquete
5. Now we will to create a new class inside the package created, this new class should have their main method. Right click over the package that just created then select the option New->Class then Eclipse will show the following screen, we should fill the field with the class name ArchivoPlanoManager, then click in checkbox of public static void main (String argv[]).


6. Eclipse was generated a empty class with following structure. :

package co.net.seft.entrenamiento.archivosplanos;

public class ArchivoPlanoManager {

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

7. Vamos a construir dos métodos, uno para escribir el archivo y otro para leerlo. El método de escritura se va llamar writer y el metodo de lectura reader.
public void reader(String fileName){

}

public void writer(String fileName){

}

8. En el método writer vamos a crear un file que escriba cuatro lineas, cada una con el numero de linea e igual numero de caracteres 'x' de la siguiente manera.
public void writer(String fileName) {
FileWriter archivo = null;
PrintWriter printWriter = null;
try {
archivo = new FileWriter(fileName);
printWriter = new PrintWriter(archivo);

for (int i = 0; i < 4; i++) {
String linea = "" + i;
for (int j = 0; j < i; j++) {
linea += "x";
}
printWriter.println(linea);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != archivo)
archivo.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}

En este caso el método writer recibe como parámetro el nombre del file a escribir, lo abre mediante el objeto FileWriter y coloca un apuntador de salida (PrintWriter) en el archivo abierto, después ejecuta la lógica de negocio para crear la linea, una vez completada la creación de la linea, la escribe en el archivo mediante el comando printWriter.println(linea);Una vez escritas todas las lineas, se procede a cerrar el file; se utiliza en el bloque finally para evitar que el archivo quede abierto si existe alguna falla en la escritura.
9. En el método reader vamos a leer el file que escribimos e imprimir por pantalla el contenido del file.
public void reader(String fileName) {

File archivo = null;
FileReader fileReader = null;
BufferedReader bufferedReader = null;

try {
archivo = new File(fileName);
fileReader = new FileReader(archivo);
bufferedReader = new BufferedReader(fileReader);

String linea;
while ((linea = bufferedReader.readLine()) != null) {
System.out.println(linea);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != fileReader) {
fileReader.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
Utilizamos un objeto File para recibir el archivo, y lo abrimos mediante un objeto FileReader, el contenido lo extraemos mediante un objeto BufferedReader, sobre el cual vamos a iterar para leer cada una de las lineas. Utilizamos un ciclo while con el código (linea = bufferedReader.readLine()) != nullpara realizar la impresión de las lineas hasta que encuentre el fin de linea del file.
Una vez alcanzamos el final de archivo procedemos a cerrar el objeto BufferedReader dentro del bloque finally de la excepcion para evitar que quede abierto el file si algo sale mal en la lectura.

10. Finalmente ponemos todo junto para ser invocado con el main de la siguiente manera.
public static void main(String[] args) {
ArchivoPlanoManager archivoPlanoManager=new ArchivoPlanoManager();
String archivo="c:/Temp/pruebas.txt";
archivoPlanoManager.writer(archivo);
archivoPlanoManager.reader(archivo);
}

Instanciamos la clase que acabamos de crear en la lineas ArchivoPlanoManager archivoPlanoManager=new ArchivoPlanoManager();  posteriormente invocamos el método writer y despues le método reader. La salida de consola de este programa debe ser igual al contenido del archivo.
0
1x
2xx
3xxx
Y el código poniendo todo junto seria:
package co.net.seft.entrenamiento.archivosplanos;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;

public class ArchivoPlanoManager {

public static void main(String[] args) {
ArchivoPlanoManager archivoPlanoManager=new ArchivoPlanoManager();
String archivo="c:/Temp/pruebas.txt";
archivoPlanoManager.writer(archivo);
archivoPlanoManager.reader(archivo);
}

public void reader(String fileName) {

File archivo = null;
FileReader fileReader = null;
BufferedReader bufferedReader = null;

try {

archivo = new File(fileName);
fileReader = new FileReader(archivo);
bufferedReader = new BufferedReader(fileReader);

String linea;
while ((linea = bufferedReader.readLine()) != null) {
System.out.println(linea);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != fileReader) {
fileReader.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}

}

public void writer(String fileName) {
FileWriter archivo = null;
PrintWriter printWriter = null;
try {
archivo = new FileWriter(fileName);
printWriter = new PrintWriter(archivo);

for (int i = 0; i < 4; i++) {
String linea = "" + i;
for (int j = 0; j < i; j++) {
linea += "x";
}
printWriter.println(linea);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != archivo)
archivo.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}

}