2 perguntas: token e saída

Olá, povão do pj.
Bom, ainda tô estudando java e tô com umas dúvidas aqui e preciso de ajuda. Acho que é coisa fútil, mas lá vai: preciso fazer a leitura de um arquivo .txt que tem o seguinte padrão de texto:
dado1 dado2 =>com 1 ou dois espaçamentos…
dado1 dado2
… …
Beleza, eu tô usando o tokenizer, mas preciso analizar os dados linha a linha para trabalhar com o dado1 e o dado2 e não tudo de uma vez como tá rolando… a pergunta é: Como faço pra separar linha a linha?

Certo, a segunda dúvida: Agora o inverso… como crio um arquivo .txt com o seguinte padrão:

frase1: N1
frase2: N2
frase3: N3 frase4: N4

Mais ou menos assim… Tô estudando o fileWriter mas não ajudou muito até agora, por isso estou recorrendo ao fórum… eu não sei como “modelar” o arquivo pra que ele fique daquele formato lá do exemplo que dei…

http://acm.uva.es/problemset/ <=site com alguns problemas… bom para estudar…

Olá An, blz, seguinte em relação a 2 dúvida é bem simples, é só você escrever no arquivo um String +/- assim : String s = "frase1: N1 \nfrase2: N2\nfrase3: N3 frase4: N4";

Isto eu não sei se a fileWriter escreve em alto nível, por exemplo, ter um write(String s), bom mas este exemplo serve para a java.io.RandomAccessFile, que é bem simples para usar.

Na dúvida 1 tenho a seguinte opiniõe:

  • usando o java.io.RandomAccessFile seria assim
//r é um java.io.RandomAccessFile
StringTokenizer stk = new StringTokenizer(r.readLine()," ");

Carinha, valeu pela ajuda. A saída eu sabia que podia ser daquela forma, só estava receoso se realmente ia gerar o .txt do jeito que queria. Bom, essa parte já matei.
Agora qto à outra dúvida, tava tentando usar o RandomAccessFile, mas não saquei como posso criar o arquivo random. Se quiser me mostrar um exemplo acho que fica mais fácil… Acabei apelando e usando um tokenizer dentro do outro…
Ainda não testei pq não terminei, mas ficou mais ou menos assim:

[code]public class prob107{
public static void main(String args[])throws IOException{

//As variáveis vão ficando aqui, seguidas pelas descrição de suas funções…
String leitura="",
linha="",
t="",
q="",

int c=1, //variável de controle…
T=0, //altura do Gato Esperto
Q=0, //quantidade de gatos trabalhadores
V=0, //gatos que não trabalham (“vagais”)
M=0, //altura dos menores gatos
N=0; //constante dada no problema…

File file = new File(“arq”);
FileReader GATOS = new FileReader(“gatos.txt”);
BufferedReader gatos = new BufferedReader(GATOS);

leitura = gatos.readLine();
//Dividindo o arquivo por linhas…
StringTokenizer tokens = new StringTokenizer(leitura,"\n");
while(tokens.hasMoreTokens()){
do{//separando os tokens de cada linha
StringTokenizer stk = new StringTokenizer(tokens.toString());
while(stk.hasMoreTokens()){
T = Integer.parseInt(stk.nextToken());
Q = Integer.parseInt(stk.nextToken());
do{//descobrir qtos gatos vagais existem…
//a preguiça mental tá comendo, resolvo isso depois…
}while(M!=1);
}
}while(T!=0 && Q!=0);
}
[/code]
Bom, falando de uma vez, esse é o problema 107 do acm. Taí o site pra quem quiser dar uma olhada. Tô resolvendo pra estudar… se quiserem ajudar com uma solução melhorzinha, tô aceitando…
http://acm.uva.es/p/v1/107.html

no se codigo soh sera lida a primeira linha do arquivo…

mas eh por ai mesmo, com o metodo readLine() da classe BufferedReader vc le apenas uma linha, dai eh soh percorrer linah pro linha e ir processando uma a uma…

try{
 BufferedReader in = new BufferedReader(new FileReader("arquivo.txt"));
 String str;
 while ((str = in.readLine()) != null){
  // aqui vc processa a linha
 }
}
catch (Exception erro){}

e pra processar a linha, como no seu codigo pode ter mais de um espaco, pra evitar problemas vc pode comecar “limpando” o espaco extra, caso ele exista, nada que o metodo trim() da classe String nao resolva…

str = str.trim();

depois eh soh jogar no StringTokenizer e pegar processar as partes…

para gravacao, ficar botando \n funciona… porem uma solucao mais elegante eh usar a classe PrintWriter, dai vc usa o metodo println() que jah coloca um “\n” automatico no final…

PrintWriter out = new PrintWriter(new FileWriter("arquivo.txt"));
out.println("linha 1");
out.println("linha 2");

Caraca, nada que um cara bem informado não poderia resolver heheh. valeu Felipe, salvou meu recesso.