Anuncios Google

[JAVA] ayuda hashtable con archivos

bueno ahora edito el tema para no crear un tema nuevo  ahora tengo un nuevo problema ya puedo cargar mi tabla hash con un txt pero ahora cuando intento meter nueva informacion se me borra la informacion el txt quisiera saber como hacer para que lo que quiero meter se ponga al final del archivo txt les dejo la forma en como lo estoy trabajando

 

//Codigo leer archivo
 
	String tex_key = new String();
 
	String tex_def = new String();
 
	try{   
 
	File archivo = new File("Programa final\\Diccionario.txt");
 
	FileReader fr = new FileReader(archivo);
 
	BufferedReader entrada = new BufferedReader(fr);
 
	String t;
 
	//Llenado hashtable
 
	while((tex_key = entrada.readLine()) != null)
 
	{tex_def = entrada.readLine();
 
	if(tex_def != null)
 
	{glosario.put(tex_key,Objeto.Def(tex_def));}
 
	//Fin llenado hashtable
 
	}
 
	/*entrada.close();*/
 
	}
 
	catch(java.io.FileNotFoundException fnfex){
 
		System.out.println("Archivo no encontrado" + fnfex);}
 
	catch(java.io.IOException ioex){}
 
   //fin lectura
 
 
 
   //Inicio escritura
 
   try{
 
   FileWriter fw = new FileWriter("Programa final\\Diccionario.txt");
 
   BufferedWriter bw = new BufferedWriter(fw);
 
   PrintWriter salida = new PrintWriter(bw);
 
   salida.println("Palabra");
 
   salida.close();
 
   bw = new BufferedWriter(new FileWriter("D:\\Programa final\\Diccionario.txt",true));
 
   salida = new PrintWriter(bw);
 
   salida.println("Definicion");
 
   salida.close();
 
   }
 
   catch(java.io.IOException ioex){}
 
   //Fin escritura

espero me puedan ayudar gracias


Soy un nuevo coder estoy aprendiendo mejorare mis trabajos dia a dia


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de moikop

La verdad, si usar un

La verdad, si usar un hashtable no es obligatorio, yo usaría dos array string + un array "buffer" para saber cuantas entradas van a tener los arrays principales..

Primero, necesitas saber como vas a organizar las definiciones.  Para eso te recomendaría usar, como dices, un archivo de texto plano con cualquier extención. Y para separar los términos, algún caracter especial como "|" por ejemplo.

Una vez determinado eso, haría un algoritmo sencillo que me devuelva una parte u otra (antes o despues del "|") cuando le pase la linea del archivo como argumento. Algo como..

public String separar(String s, boolean f) {
    int index = s.indexOf("|");
    if (f) {
        return s.substring(0, index);
    } else {
        return s.substring(index + 1, s.length);
    }
}

Después, un algoritmo que lea el archivo, que determine cuantos elementos deben tener los arrays principales, y que almacene los datos en su lugar. Para esto podes leer las lineas con un Scanner, separar ambos lados de la linea con el algoritmo "separar" y asi ubicar todo donde debe ir.

Para eliminar el término, igualaría el elemento en los dos arrays a null o "", y después con el algoritmo que escribe en el archivo, checkear si el elemento es null o "", y en caso de serlo, saltearlo.

Para el algoritmo de escritura en el archivo/añadir un elemento a la tabla, escribiría el término y su definicion directamente al final del archivo (recorda seguir la organización del archivo (el "|" en este ejemplo)), e invocaría al algoritmo que lee el archivo para que se actualice la tabla.
En esta misma función, acordate de checkear si el elemento es null o un string vacío, para asi saltearlo.

Y con eso ya sería todo, no? :P
Espero que te sea de ayuda. 


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Gracias.. pero

veras aunque ya voy en tercer semestres nuestro maestro de POO no nos enseyo a usar y guardar en archivos y dado que ahora esoty en estructura de datos se me vienen los problemas.  lei tu informacion y me resulto util por que ahora ya se como usar separadores en un archivo de texto pero en tu forma falto el metodo de buscar  y creo que el array buffer que mencionas es usando bufferreader cosa que solo e leido pero n he ocupado

 

amm no se si podria trabajar asi,  se me ocurrio la siguiente manera de trabajarlo en un archivo txt usuando metodo separadores y tablas hash dado que como en el archivo estaria asi suponiendo 

 

ACCESO DIRECTO : Es un ícono que permite abrir más fácilmente un determinado programa o archivo.

|

ACROBAT : Programa de Adobe que permite capturar documentos y verlos en su apariencia original. Acrobat trabaja con archivos PDF. 

|

etc 

 

digamos que asi estaria mi Diccionario.txt entonces la key seria las palabras antes de ":" 

la definicion estaria despues de ":"

y el separador entre key/definicion seria | 

pero no se como meter la palabra en la key y la deficion en su lugar para que las pudiera guardar en glosario.put(key,Objeto.Def(definicion)

espero y me puedas tirar un cable por que estoy desesperado gracias por tu ayuda y disculpa mi ignorancia xD


Soy un nuevo coder estoy aprendiendo mejorare mis trabajos dia a dia

Imagen de moikop

Con el separador, me refería

Con el separador, me refería a algo así:

ACCESO DIRECTO | Es un ícono que permite abrir más fácilmente un determinado programa o archivo.
ACROBAT | Programa de Adobe que permite capturar documentos y verlos en su apariencia original. Acrobat trabaja con archivos PDF.

Como ves, el termino y la definicion esta separado por el "|". Para separar entre terminos (termino1, termino2, etc) en el mismo archivo, simplemente crea una nueva linea. Ya que luego cuando leamos el archivo, leeremos linea por linea.

Para buscar, es muy simple. Partiendo desde la base que cada linea del archivo esta separada en dos arrays con el mismo indice (es decir, si terminos[0] es "ACROBAT", la definicion para acrobat esta en definiciones[0]), con un bucle for repasas todo el array (ya sea el array de terminos (antes del "|") o de definiciones (después del "|"), y comparas el string con lo que estas buscando. Así de fácil!

Para leer el archivo, no te daré el código. Pero te daré los pasos a seguir:

1. Usar Scanner y FileInputStream para abrir el archivo.
2. Mientras (scanner.hasNextLine()), apuntar dicha linea al array string que usamos como buffer.
3. Cerrar el Scanner.
4. Usar un bucle for para repasar el array buffer y, usando  el algoritmo de separación, separar de la linea el termino y la definicion, y poner cada uno en su array CON EL MISMO INDICE.


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Gracias

Wuaaoo ya te entendi hehe intentare hacerlo de mi forma y si no puedo intentare de tu forma y ya pasado mañana o mañana en la noche veras si pude o te pido otro cable XD 


Soy un nuevo coder estoy aprendiendo mejorare mis trabajos dia a dia

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.