Insertar lineas en un archivo de texto plano

Estoy creando un archivo, a partir de otro, pero el problema es que todas las lineas las junta, supongamos que el archivo que cree debe tener la siguiente estructura:
Amalia
Andres
Camila
Victoria
Pero el archivo se crea así:
Amalia Andres Camila Victoria
Este es mi código:
class fconversionoct {
public static void main(String [] arg) {
File archivo = null;
FileReader fr = null;
String linea;
String b;
int a;
String p[]={ "A","C","V"}
ArrayList lineas = new ArrayList();
try {
archivo = new File ("C:/archivo.txt");
fr = new FileReader (archivo);
BufferedReader br = new BufferedReader(fr);
while((linea=br.readLine())!=null){ //inicio while 1
lineas.add(linea);}//fin while1
try { //crear archivo
String nombreArchivo= "C:\\nuevo.txt"; // Aqui se le asigna el nombre y
FileWriter fw = null; // la extension al archivo
fw = new FileWriter(nombreArchivo);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter salArch = new PrintWriter(bw);
for (int j = 0 ; j < lineas.size() ; j++)//recorrer el arraylist
{ //inicio for 1
linea = (String)lineas.get(j);
StringTokenizer st = new StringTokenizer( linea,">" );
while(st.hasMoreTokens()){ //inicio while2
b= st.nextToken();
for ( int c = 0; c< p.length; c++ )
{//inico for2
if(b.startsWith(p[c]))
salArch.print(b+"\t"+"\n");
}//fin for2
}//fin while
}//fin for1
salArch.close();
}//fin try
catch (IOException ex) {
}//fin catch
que puedo hacer ??
espero me puedas ayudar
:)
JOptionPane.showMessageDialog( null, "OPERACION EXITOSA", "ANALISIS ", JOptionPane.INFORMATION_MESSAGE );
}//fin try1
catch(IOException e){
System.out.println(e);
}
finally{
try{ //el bloque finally se ejecuta siempre, por eso, si se cierra el fichero
if( fr != null){ //al final del primer try, y ha dado un error antes, pasaría
fr.close(); //al 1er catch y luego saldría, dejándolo abierto. Es conveniente
} //cerrarlo aquí, comprobando que no sea -por un error anterior, como
}
catch (IOException e){ // no tener permisos de lectura o que no exista - de valor null.
}
}
System.exit(0);} }

1 respuesta

Respuesta
1
Antes de nada, veo que estás creando un archivo "nuevo.txt" por cada línea que exista en "archivo.txt". ¿De verdad quieres hacer eso? Estás machacando continuamente el contenido del archivo. Además, veo que dentro del while donde vas leyendo las líneas del archivo, tienes otro bucle donde vuelves a iterara por las líneas que llevas introducidas. La verdad es que no le veo el sentido...
Por favor, explícame un poco mejor qué quieres hacer:
1) Formato de las líneas del fichero de lectura
2) Cantidad de ficheros resultantes
3) Formato de cada fichero resultante
ok mira;
tengo un archivo : archivo.log
Lo leo y agrego cada una de las lineas a un arraylist, después creo un nuevo archivo, llamado :nuevo.log, después recorro el arraylist y creo un Token ">", y sigo la lógica de los tokens, el siguiente token lo guardo en una variable es y comparo si el siguiente token comienza con algún elemneto de mi arreglo p [] si es igual entonces guardo la linea a partir del token en el nuevo archivo y así sucesivamente .
Y después cierro el archivo
El formato del archivo original (archivo.log) es:
2008-10-01 16:27:50 >$GPGGA, 162816.00,1916.1934...
Linea 2
Linea 3
.
.
.
Linea n

El formato del archivo creado es (nuevo.log) es:
$GPGGA,162816.00,1916.1938.. nuevalinea2 nuevalinea 3... nuevalinea n
y el formato k debe crear es el siguiente:
$GPGGA....
nuevalinea2
nuevalinea3
.
.
.
nuevalinea n
El código original es :
class fconversionoct {
public static void main(String [] arg) {
File archivo = null;
FileReader fr = null;
String linea;
String b;
int a;
String p[]={ "$GPGGA","$GPRMC","$GPGSV","$GPGSA","$GPVTG","$GPGLL","$GPIOP","$GPGSM","$GPAREA","$GPEVENT"};
ArrayList lineas = new ArrayList();
try {
archivo = new File ("C:/archivo.log");
fr = new FileReader (archivo);
BufferedReader br = new BufferedReader(fr);
while((linea=br.readLine())!=null){ //inicio while 1
lineas.add(linea);}//fin while1
try { //crear archivo
String nombreArchivo= "C:\\nuevo.log"; // Aqui se le asigna el nombre y
FileWriter fw = null; // la extension al archivo
fw = new FileWriter(nombreArchivo);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter salArch = new PrintWriter(bw);
for (int j = 0 ; j < lineas.size() ; j++)//recorrer el arraylist
{ //inicio for 1
linea = (String)lineas.get(j);
StringTokenizer st = new StringTokenizer( linea,">" );
while(st.hasMoreTokens()){ //inicio while2
b= st.nextToken();
for ( int c = 0; c< p.length; c++ )
{
if(b.startsWith(p[c]))
salArch.print(b+"\n");
}
}//fin while
}//fin for1
salArch.close();
}//fin try
catch (IOException ex) {
}//fin catch
JOptionPane.showMessageDialog( null, "OPERACION EXITOSA", "ANALISIS ", JOptionPane.INFORMATION_MESSAGE );
}//fin try1
catch(IOException e){
System.out.println(e);
}
finally{
try{ //el bloque finally se ejecuta siempre, por eso, si se cierra el fichero
if( fr != null){ //al final del primer try, y ha dado un error antes, pasaría
fr.close(); //al 1er catch y luego saldría, dejándolo abierto. Es conveniente
} //cerrarlo aquí, comprobando que no sea -por un error anterior, como
}
catch (IOException e){ // no tener permisos de lectura o que no exista - de valor null.
}
}
System.exit(0);} }
Espero haberme explicado
Gracias
;)
usa salArch.println(b); en vez de salArch.print(b + "\n")
Con eso creo que basta.
Ok perfecto, pero mira ahora estoy seleccionando la ruta para guardar el archivo con lo siguiente:
JFileChooser selectorArchivo = new JFileChooser(); // mostrar cuadro de diálogo para que el usuario pueda seleccionar el archivo
selectorArchivo.setFileSelectionMode( JFileChooser.FILES_ONLY );
int resultado = selectorArchivo.showOpenDialog( null );
nombreArchivo = selectorArchivo.getSelectedFile(); // obtener el archivo seleccionado
ArrayList lineas = new ArrayList();
String linea;
FileReader fr = null;
String cadena="PARA GUARDARLO";
try {
fr = new FileReader (nombreArchivo);
BufferedReader br = new BufferedReader(fr);
while((linea=br.readLine())!=null)
lineas.add(linea);
for (int j = 0 ; j < lineas.size() ; j++)//recorrer el arraylist
{ //inicio for 1
linea = (String)lineas.get(j); }//for
if(linea.startsWith("$"))
{
A= nombreArchivo;
areaSalida.append("ARCHIVO ORIGINAL : "+A+ "\n");}
else{
JOptionPane.showMessageDialog( null, "EL ARCHIVO SE CONVERTIRA, SELECCIONE UNA RUTA Y UN NOMBRE " + cadena, "CREACION ", JOptionPane.INFORMATION_MESSAGE );
JFileChooser selectorArchivo1 = new JFileChooser(); // mostrar cuadro de diálogo para que el usuario pueda seleccionar el archivo
selectorArchivo1.setFileSelectionMode( JFileChooser.FILES_ONLY );
int resultado1 = selectorArchivo1.showSaveDialog( null );
File nombreArchivo1 = selectorArchivo1.getSelectedFile(); // obtener el archivo seleccionado
// mostrar error si el nombre del archivo es inválido
if ( nombreArchivo1 == null || nombreArchivo1.getName().equals( " " ) )
{
JOptionPane.showMessageDialog( null, "Nombre de archivo incorrecto", "Nombre de archivo incorrecto", JOptionPane.ERROR_MESSAGE );
System.exit( 0 );}
else { // guardar archivo
try {
RandomAccessFile archivo = new RandomAccessFile( nombreArchivo1, "rw" );
A=nombreArchivo1;
for (int j = 0 ; j < lineas.size() ; j++)//recorrer el arraylist
{ //inicio for 1
linea = (String)lineas.get(j);
archivo.writeBytes(linea.substring(linea.indexOf(">")+1) + "\n"); *****
}//fin for1
archivo.close(); // cerrar el archivo
areaSalida.append("ARCHIVO ORIGINAL : "+nombreArchivo+ "\n");
areaSalida.append("ARCHIVO CONVERTIDO: "+A+ "\n");
// mostrar mensaje indicando que el archivo se creó
JOptionPane.showMessageDialog( null, "SE CREO EL ARCHIVO " + nombreArchivo1, "CREACION ", JOptionPane.INFORMATION_MESSAGE );
} // fin del bloque try
// procesar excepciones durante operaciones de apertura, escritura o cierre del archivo
catch ( IOException excepcionES ) {
JOptionPane.showMessageDialog( null, "Error al procesar el archivo",
"Error al procesar el archivo", JOptionPane.ERROR_MESSAGE );
System.exit( 1 );
}
} // fin de instrucción else
}//fin else
}//fin try1
catch(IOException e){
JOptionPane.showMessageDialog( null, e,
"Error al procesar el archivo", JOptionPane.ERROR_MESSAGE );
}finally{
try{ //el bloque finally se ejecuta siempre, por eso, si se cierra el fichero
if( fr != null){ //al final del primer try, y ha dado un error antes, pasaría
fr.close(); //al 1er catch y luego saldría, dejándolo abierto. Es conveniente
} //cerrarlo aquí, comprobando que no sea -por un error anterior, como
}catch (IOException e){ // no tener permisos de lectura o que no exista - de valor null.
JOptionPane.showMessageDialog( null, e,
"Error al procesar el archivo", JOptionPane.ERROR_MESSAGE );
}
}
y estoy utilizando : la linea *****
Para guardar el contenido en el nuevo archivo pero sigue pasando lo mismo,
Ya le quite el salto de linea pero nada, también le intente con el método que e me dijiste y tampoco.

Espero me puedas ayudar. GRACIAS.
:)
prueba con archivo.writeChars(miString + System.getProperty("line.separator"));
Con esto te aseguras que el retorno de carro lo mete bien.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas