Es un código simple escrito para ustedes, donde implemento las dos operaciones basica para este tipo de problemas, lectura y escritura de un archivo plano de texto (El resto de operaciones posibles se desprenden de estas), espero les sea de utilidad.
Aparte les dejo al final el proyecto hecho en Netbeans usando interface grafica.
Nota: En la ruta si usan Windows al igual que en Linux deben usar el "/".
Codigo de la clase Archivo:
//Autor: Rey Salcedo Padilla import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; public class Archivo{ public void escribir(String ruta, String cadena){ File archivo = new File(ruta); try { FileWriter escribirArchivo = new FileWriter(archivo, true); BufferedWriter buffer = new BufferedWriter(escribirArchivo); buffer.write(cadena); buffer.newLine(); buffer.close(); }catch (Exception ex) { } } public String leer(String ruta) { ArrayList array = new ArrayList(); String linea = ""; String retornar = ""; File archivo = new File(ruta); try { FileReader leerArchivo = new FileReader(archivo); BufferedReader buffer = new BufferedReader(leerArchivo); while ((linea = buffer.readLine()) != null){ retornar += linea + "\n"; } buffer.close(); }catch (Exception ex){ } return retornar; } }
//Autor:Rey Salcedo Padilla public class Main{ public static void main(String []args){ Archivo archivo = new Archivo(); String ruta = "/home/rey/Escritorio/ArchivoDeTexto/hola.txt"; archivo.escribir(ruta,"Todos obedecen con gusto cuando el que manda es justo."); archivo.escribir(ruta,"Los años dan enseñanzas que los dias no alcanzan a comprender."); System.out.println(archivo.leer(ruta)); } }
Comenta acerca del código.
Muchas gracias men, me sirvio de mucho
ResponderBorrarhola necesito crear un formulario html que inserte registros a un .txt sin utilizar php gracias....
ResponderBorrarhola oye eso es imposible.. para hacer eso tienes que usar algun lenguaje de programacion web y html solo es de diceño web XDD si nesesitas ayuda con eso este es mi correo i_s_ra789@hotmail.com
BorrarDe antemano muy agradecido
ResponderBorraratte.
David desde Guate
it_mdavid@hotmail.com
Puedes usar Java, investiga Jsp...
ResponderBorraresta bueno, y como se aria si quisiera despues de modificarlo, guardarlo en otro archivo de texto?????
ResponderBorrarHola.
ResponderBorraren la clase Archivo implementé un método llamado escribir así:
escribir(String ruta, String cadena); donde la ruta seria donde voy a guardar el archivo, en el caso de tu pregunta seria una ruta y nombre diferente al original, y cadena seria el contenido de JTextField y listo.
Lo demás de Por medio JDialog solicitar los nuevos datos.
Inténtalo y me cuentas, anonimo
muchisimnas gracias, me gustaria saber como puedo contar los caracteres de un texto y ademas de eso, por ejemplo saber cuantas "a" hay en un texto... seria de mucha ayuda gracias
ResponderBorrarSi lo tienes almacenado en un String, puede hacerlo con el metodo length(); para contar cuantas letras 'a' hay ten encuenta que las cadena en Java con vectores char, por ejemplo:
ResponderBorrarchar data[] = {'a', 'b', 'c'};
String str = new String(data);
//Es quivalente a:
String str = "abc";
Es decir lo puedes recorrer y contar solo las 'a'
----------------------------------------------------
Si no quieres implementar estos metodos; mira la documentacion de java (http://docs.oracle.com/javase/6/docs/api/) y ubicate en la clase String; veras muchos metodos que te facilitaran las cosas; escribe algo de codigo y comentalo en este blogger.
public class ejemplo{
ResponderBorrarpublic static void main(String []args){
String cadenaTexto = "En un recinto del zoológico se "+
"tienen dos tipos de animales: avestruces y "+
"jirafas. Hay 30 ojos y 44 patas, "+
"¿cuántos animales hay de cada tipo?";
System.out.println("------------------------");
System.out.println(cadenaTexto);
System.out.println("------------------------");
//Como un String es un vector char
//lo recorreremos para saber su longitud
int contador = 0;
for(char letra:cadenaTexto.toCharArray()){
contador++;
}
System.out.println("Numero de caracteres:" + contador);
System.out.println("------------------------");
//forma mas simple de saber la longitud (recomendada)
System.out.println("Numero de caracteres:" + cadenaTexto.length());
System.out.println("------------------------");
//-----------------------------------------------
contador = 0;
char letraABuscar = 'a';
for(char letra:cadenaTexto.toCharArray()){
if(letraABuscar == letra){
contador++;
}
}
System.out.println("La letra '"+letraABuscar+"' esta " + contador + " veces.");
}
}
muy buen post, tengo una duda si quisiera que cuando abra el archivo me leyera 8 lineas y las escribiera en una sola como seria?
ResponderBorrarObserva que escribi un metodo llamado leer(String ruta), el cual contiene un ciclo while que itera siempre que exista una linea que leer en el archivo.
ResponderBorrarla respuesta seria que vallas acumulando cada 8 lineas leidas, das un enter "/n" y asi hasta que ya no tengas lineas que leer, despues retorna
Intenta y me dices como te fue.
no me quedo muy claro, esta es la parte de codigo que mencionas
ResponderBorrarwhile ((linea = buffer.readLine()) != null){
retornar += linea + "\n";
}
cuando mencionas acumular mi duda es en donde lo acumulo? acaso a esto te refieres
for(int i=1;i<9;i++){
linea?????????
}
se me ocurre que lo concadenes en una variable String temporal, cuando el ciclo llegue a 8 o 16, etc; lo agregas a la variable retornar y listo.
ResponderBorrarOtra idea mejor que se me acaba de ocurrir es: si te das cuenta el lee una linea y zas da un enter y asi hasta leer todo el archivo.
ResponderBorrarcambiemos eso, y le damos enter solo cuando hallamos leido 8 lineas, y luego 16 y etc.
hola que tal rey muchas gracias por toda la ayuda ya logre que lea un numero definido de lineas las ponga en una sola y luego haga el salto de linea el codigo me quedo de la sig manera
ResponderBorrarwhile ((linea = buffer.readLine()) != null){
if(operador<2){
retornar +=linea + ",";
operador++;
}else{
operador=0;
retornar +=linea + "\n";
}
}
mi duda es la siguiente: comence por leer 3 lineas y ponerle una coma y luego haga el salto de linea digo si hace esto lo hara para cualquier numero de lineas, asi que mi contador lo inicialice en 0 lo aumente de 1 en 1 pero sorpresa si le pongo 3 me devuelve 4 lineas.
porque??????
lo mas practico le puse oprador<2 y quedo pero me quede con esa duda. sinceramente no estaba tan dificil pero esperaba que alguien lo hiciera por mi cuando me sente y decidi pensar fue mas facil
ahora tengo otra duda cuando guardo el archivo me sobreescribe el primero y ademas no respeta el texto como aparece en textfield, lo escribe todo en una sola cadena, tendria que hacer lo mismo en el metodo escribir como lo hice en el metodo leer?
ResponderBorrarHola para la primera pregunta, la respuesta es que recuerda que cuando inicias desde cer, el cero se evalua tambien.
ResponderBorrares decir, si pones 3; se elavalua el 0,1,2,3; si te das cuenta son 4 numeros
Con relacion a lo de sobre escribir en la clase Archivo mira la linea.
ResponderBorrarFileWriter escribirArchivo = new FileWriter(archivo, true);
Cambia el true por false; y mira lo que sucede
mmm no conserva nada del archivo anterior y sobre escribe todo, pero aun asi cuando lee el archivo y coloca el texto en el textfield me aparece asi
ResponderBorrarvictor palomo,123456789,victor@palomo.com
ana luisa,987654321,ana@luisa.com
donaji guti,789456123,donaji@guti.com
y cuando lo guardo me aparece todo seguido como una sola cadena sin saltos de linea osea quiero que se guarde como aparece en el textfield y otra pregunta cuantas lineas puedo abrir en ese textfield
tengo un archivo donde cada 4 lineas corresponde a un registro el archivo esta asi
ResponderBorrarnombre
email
celular
empresa
entonces yo leo 4 lineas y las pongo seguidas y separadas con comas
nombre,email,celular,empresa
el problema es que el archivo es como de 60,000 lineas entonces debe leer el archivo, ordenar y guardar en un nuevo, tome este ejemplo para probar como podria hacerlo pero no se que tan factible sea hacerlo de una manera similar
Recuerda que si quieres generar saltos de lineas debes usar "\n"; y otra cosa, no seria mejor que guardes cada registro asi por ejemplo:
ResponderBorrarnombre:fulanito;email:fulanito@talcosa.com;celular:0000;empresa:holamundo
en realidad le pongo comas porque de esta forma lo podria abrir en un excel tipo csv, oye rey crees que el textfield pueda soportar un archivo txt asi de grande como de 100,000 lineas, o habra otra forma de hacerlo???
ResponderBorrarpara archivos csv puedes usar cualquier separador; creo que en vez de usar JTextField, te sirve mas JTextArea:
ResponderBorrarlo que te sugeri con relacion a los registro o filas asi:
nombre:fulanito;email:fulanito@talcosa.com;celular:0000;empresa:holamundo
es porquye puedes primeramente partir la cadenas usando el ";" como separacion y luego extraer el dato usando los ":"
Cuando tenga tiempo te envio un metodo, yo hice halgo igual hace tiempo
bueno intentare hacer que funcione el problema es que ya voy sobre tiempo y ya necesito poner a correr el programa, muchas gracias rey de todos modos sigo con la misma duda este es el metodo para escribir
ResponderBorrarpublic void escribir(String ruta, String cadena){
File archivo = new File(ruta);
try {
FileWriter escribirArchivo = new FileWriter(archivo, false);
BufferedWriter buffer = new BufferedWriter(escribirArchivo);
buffer.write(cadena);
buffer.newLine();
buffer.close();
}catch (Exception ex) {
}
}
no entiendo donde podria el salto de linea, lo tendria que poner igual como hice el metodo leer
mandame el proyecto para colaborarte.
ResponderBorrarhola rey te comento ya logre que funcionara aparte de los \n tenia que poner \r\n tenia que dar el salto de linea y luego el retorno de carro, trate de abrir el txt para que me ordenara el archivo pero como me lo temia el programa se atoro, estaba pensando que en lugar de que me lo abra en el txt me lo guarde directo en otro archivo, tu que opinas??? o que podria hacer? el archivo txt es de 100,000 lineas
ResponderBorrares oblitatorio que use archivos de texto plano? puede usar bases de datos portables?, esta ultima es una mejor opcion
ResponderBorrarsegun lo que me cuentas, quieres usar un formulario para tomar ciertos datos e irlos guardando en un archivo de texto, y luego recuperarlos; cuando dices ordenar te refieres a los datos en el archivo de texto?, como haces para recuperar los datos del archivo y luego mostrarlos?
ResponderBorrarMia este ejemplo que hice usando una base de datos portable en un archivo.
ResponderBorrarhttp://usandojava.blogspot.com/2012/03/sqlite-java-y-un-ejemplo-practico.html
Tienes razon no he sido muy claro con lo que tengo que hacer te explico,
ResponderBorrarme dieron un archivo de texto tipo base de datos el problema es que los registros estan uno de bajo de otro,
nombre
direccion
telefono
email
entonces tengo que abrir el archivo que son como 100,000 lineas y ordenar en columnas estos datos de la siguiente manera:
nombre direccion telefono email
realmente una vez que este ordenado puedo guardarlo donde sea en otro archivo txt, o en una base de datos lo importante es que se ordenen los datos en columnas
Este comentario ha sido eliminado por el autor.
ResponderBorrarOrdenar? mas bien organizar;
ResponderBorrarprueba con este metodo; ruta es donde está el archivo, el archivo debe ser asi como me lo describistes, veras como te crea otro alli mismo pero organizado.
public void Organizar(String ruta) {
ArrayList array = new ArrayList();
String linea = "";
String retornar = "";
File archivo = new File(ruta);
int contador = 0;
String cadena = "";
try {
FileReader leerArchivo = new FileReader(archivo);
BufferedReader buffer = new BufferedReader(leerArchivo);
while ((linea = buffer.readLine()) != null){
if(contador != 4){
cadena += linea+",";
contador++;
}else{
escribir(ruta+"Orgganizado",cadena);
cadena = linea+",";
contador = 1;
}
}
buffer.close();
}catch (Exception ex){
}
}
De hecho rey ya lo organiza esa parte esta hecha mi duda ahora es sobre la rapidez para abrir el archivo pues te comento tiene como 100,000 lineas y me da la impresion que el programa truena o tu dime cuanto tardaria en organizar el txt que te comento
BorrarEn archivos de texto plano es mas lento porque la consulta de informacion es secuencial; te recomuendo que pase eso a una base de datos, por ejemplo Sqlite el cual no necesitas innstalar servidor.
ResponderBorrarmira el ejemplo: te puede servir:
http://usandojava.blogspot.com/2012/03/sqlite-java-y-un-ejemplo-practico.html
de cualquier modo necesito un programa que pase los datos del txt a la base de datos, no???
ResponderBorrarSi, guíate por el ejemplo que publique.
ResponderBorrarpues muchas gracias rey la verdad me sirvio muchisimo tus post y gracias por la atencion, nos vemos en tu otra publicacion jajajjajaja
Borrar