File e Filewriter

Preciso fazer um trabalho que escreva em um TXT registros como se fosse de um banco e faça as operações de remoção, inserção e etc nele. Ainda terei que fazer bubblesort e essas coisas nele… Não estou conseguindo nem começar:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


public class dadosLic {

  public static void popularBanco() throws IOException{

	File diretorio = new File("C:\\java", "banco.txt");
	
    if (diretorio.isDirectory()){  
    FileWriter arquivo = new FileWriter("banco.txt", false);  

    arquivo.write("1. João");
    arquivo.write("2. Pedro");
    arquivo.write("3. José");
    arquivo.write("4. Beraldão");
    arquivo.write("5. Tião");
    arquivo.write("6. Zé");
    arquivo.write("7. Dunha");
    arquivo.write("8. Mario");
    arquivo.write("9. Luigi");
    arquivo.write("10. Tony");
    arquivo.close();  
      
    }
  }
}

Oi.

Leia a API do FileWriter. Para o seu caso, até acho interessante usar o PrinterWriter, para deixar melhor formatado.

No GUJ tem um breve artigo mas bem explicado sobre manipulação de arquivos, vale a pena ler.
Tente e se as dúvidas persistirem, poste o seu código e o resultados para ajudarmos.

Abraços.

Obrigado amigo.

Primeiramente vamos fazer ele criar e escrever no mesmo.
No meu exemplo eu criei uma classe Escrever.

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Escrever {

	private File arquivo;
	
	public Escrever() {
		arquivo = new File("arquivo.txt");
	}
	public void escreveTexto() throws IOException{
		FileWriter inserindo = new FileWriter(arquivo, true);
		inserindo.write("1. Mario"+"\n");
		inserindo.write("2. Luigi"+"\n");
		inserindo.write("3. Jose"+"\n");
		inserindo.write("4. Pedro"+"\n");
		inserindo.write("5. Francisco");
		inserindo.close();
	}
	
}

Após isso criei uma classe pra executar o método escreveTexto, chamada RealizaOperacao, só pra ficar mais organizado a estrutura.

[code]import java.io.IOException;

public class RealizaOperacao {

public static void main(String[] args) throws IOException {
	Escrever escrever = new Escrever();
	escrever.escreveTexto();

}

}[/code]

Muito obrigado amigo, estava tendo dificuldade para entender como usar corretamente e instanciar corretamente a classe file, isso ajudou bastante.

Esse exemplo faz a leitura do arquivo que foi criado.

[code]import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.text.SimpleDateFormat;

public class LerArquivo {
private File arquivo;

public LerArquivo() {
	arquivo = new File("arquivo.txt");
	try {
		FileReader leitura = new FileReader(arquivo);
		BufferedReader br = new BufferedReader(leitura);
		String linha = "";
		while((linha = br.readLine()) != null){
			System.out.println(linha);
		}
		leitura.close();
		br.close();
	} catch (Exception e) {
		System.out.println("Erro na leitura");
	}
	
}
public static void main(String[] args) {
	new LerArquivo();
}

}
[/code]

O restante é contigo parceiro, segue agora o que o nel te indicou.
Espero ter ajudado!

Ajudaram muito os dois, eu demorei um tanto pra entender que o file só aponta ao invés de criar o arquivo e por ter demorado pra entender isso fiquei viajando e tentando resolver de outras maneiras.
Muito obrigado.

A classe File já cria esse arquivo pra ti, não precisa se preocupar com isso!

Para não confundir a cabeça da rapaziada que está acompanhando este tópico:

A classe File serve para definir nomes de arquivos e diretórios (ele é equivalente às classes do .NET System.IO.FileInfo e System.IO.DirectoryInfo, se você sabe falar duas línguas).

Existem alguns métodos estáticos na classe File que servem para criar arquivos vazios ou achar nomes de diretórios temporários. Eles estão lá para ajudar, mas não são o objetivo principal dessa classe.

O objetivo principal da classe File NÃO é o de criar arquivos; é o de representar nomes de arquivos e diretórios.

Aliás, é muito mais lento criar um arquivo vazio primeiro, e depois recriá-lo com FileOutputStream ou FileWriter, que criar diretamente o arquivo com FileOutputStream ou FileWriter.

Muita gente, talvez por superstição, faz exatamente isso, mas isso costuma ser desnecessário.

O objetivo de criar um arquivo vazio com a classe File é, normalmente, de avisar a algum outro programa que está esperando um marcador (como um arquivo vazio aparecer em um diretório) para prosseguir no funcionamento de alguma coisa.

Sobre a minha ideia inicial nem sei se será possivel mesmo…
Criar o arquivo com os registros e usando

	FileWriter inserindo = new FileWriter(arquivo, true);
	PrintWriter saida = new PrintWriter(inserindo);
	saida.println("1. Mario");
	saida.println("2. Luigi");

eu consegui colocar um a um por linha. Mas a ideia era com substring pegar depois esses “registros” e modificar ou deletar e até agora não consegui achar um jeito de fazer isso…
de qualquer forma muito obrigado a todos, nunca é demais aprender.

[quote=vtr88]Sobre a minha ideia inicial nem sei se será possivel mesmo…
Criar o arquivo com os registros e usando

	FileWriter inserindo = new FileWriter(arquivo, true);
	PrintWriter saida = new PrintWriter(inserindo);
	saida.println("1. Mario");
	saida.println("2. Luigi");

eu consegui colocar um a um por linha. Mas a ideia era com substring pegar depois esses “registros” e modificar ou deletar e até agora não consegui achar um jeito de fazer isso…
de qualquer forma muito obrigado a todos, nunca é demais aprender.[/quote]

Bom, você viu como executar a escrita no arquivo, o que precisa fazer agora é aprender a ler o arquivo. Há o BufferedReader, mas também outras classes.
Aquele artigo que te passei o link (veja o começo do post) ensina como ler o arquivo também. Leia ele novamente.

A coisa ta andando…

eu travei agora na primeira operação, mas se alguem puder ajudar nela acho que será facil achar o caminho das outras…

[code]
public void inserir(String nome) throws IOException {
FileWriter inserindo = new FileWriter(arquivo, true);
PrintWriter saida = new PrintWriter(inserindo);
FileReader reader = new FileReader(arquivo);
BufferedReader leitor = new BufferedReader(reader);

    int i = 1;
    while (leitor.readLine().charAt(0) == i) {
        i++;
    }
    saida.println(i + ": " + nome);
    saida.close();
    inserindo.close();
}[/code]

essa é minha inserção, o problema é na primeira vez que passa no readline ele começa com um e não entra no contador, e dai pra frente ele pula de dois em dois.
eu procurei nas classes bufferedreader e filereader alguma coisa pra passar para a proxima linha mas não tem. só o readline mesmo.
o ideal seria ter um leitor.nextline dentro do while…
alguma direção para pesquisar?

Oi.
A pratica correta na manipulação de arquivos (em outros locais também) é que você utilize o try-catch e um bloco finally, e nesse bloco finally, você fecha seus streams.
Dessa forma, tu garante que se houver uma exceção, não corre o risco de nenhum stream ficar em aberto e depender do GC (“coletor de lixo”).

Sobre o seu código, como o próprio nome diz, readLine() lê linha a linha do seu arquivo.
Ele pega toda sua linha e transforma em uma String, na segunda iteração ele pula automaticamente para a próxima linha e assim por diante, até encerrar o ciclo.
Sabendo isso, cabe a você aplicar sua lógica de acordo com a tua necessidade.

Aqui tem dois links sobre isso, dá uma olhada:

http://www.javapractices.com/topic/TopicAction.do?Id=42

http://www.javadb.com/read-from-file-using-bufferedreader