Otra vez con este problema...

Saku
16 de Enero del 2006
Hola.

Mi dominio de Java es cero patatero y lleva ya unos días atascado en este problema:

Resulta que quiero escribir un programa que lea un fichero de nombre "escrito.txt" y lo haga aparecer en pantalla. Pero con una particularidad, y es que si lee un caracter '$' ha de ignorarlo así como el resto de la línea.
Leí por ahí que esto se podía hacer facilmente con readLine, pero no termino de aclararme.
Tengo dos códigos fuente alternativos pero ninguno de los dos me funciona y me gustaría que alguno me dijeseis donde está el fallo o qué otro algoritmo podría utilizar para poder hacer funcionar el programa.
Los códigos fuente serían:

Prueba.java --->
-----------------------------------------------------------------------
import java.io.*;

class Prueba {
public static void main(String[] args) {
try {
File fich = new File("escrito.txt");
FileInputStream escrito = new FileInputStream(fich);
int cont;
int c;
cont = 0;
String tex = new String("");

bucle1:
while ((c = escrito.read()) != -1) {
if (c == (int)'$') {
c = escrito.read();
while (c != (int)'n') {
c = escrito.read();
}
continue bucle1;
}
else {
tex = tex + (char)c;
cont++;
}
}



System.out.println(tex);
System.out.println(cont);
} catch (FileNotFoundException e) {
System.err.println("FileStreamsTest: " + e);
} catch (IOException e) {
System.err.println("FileStreamsTest: " + e);
}
}
}
-----------------------------------------------------------------------

Prueba2.java --->
------------------------------------------------------------------------
import java.io.*;

class Prueba2 {
public static void main(String[] args) {
try {
File fich = new File("escrito.txt");
FileInputStream sud = new FileInputStream(fich);
int cont;
int c;
cont = 0;
boolean sigue = true;
String tex = new String("");

bucle1:
while ((c = escrito.read()) != -1) {
if (c == (int)'$') {
sigue = false;
}
else {
sigue = true;
}
if (sigue) {
tex = tex + (char)c;
cont++;
}
}



System.out.println(tex);
System.out.println(cont);
} catch (FileNotFoundException e) {
System.err.println("FileStreamsTest: " + e);
} catch (IOException e) {
System.err.println("FileStreamsTest: " + e);
}
}
}
-----------------------------------------------------------------------

Muchas gracias de antemano y perdón por el tostón.

Diego
16 de Enero del 2006
Utiliza la clase java.io.StreamTokenizer que puedes construir con tu FileInputStream (aunque yo te recomendaría utilizar un Reader, que lee directamente en caracteres Unicode y te ahorras problemas), y pasaría el carácter a partir del cual no quieres que se siga leyendo más al método:
commentChar
public void commentChar(int ch)Specified that the character argument starts a single-line comment. All characters from the comment character to the end of the line are ignored by this stream tokenizer.
Any other attribute settings for the specified character are cleared.

Parameters:
ch - the character.

Esto hace exactamente lo que tu quieres de forma automática. Espero que te sirva.

Saku
16 de Enero del 2006
Gracias Diego. Voy a intentar lo que me propones.
Un saludo.