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();
}
}
}
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.
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.
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.
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.