FileReader, BufferedReader, String[]

12 respostas
xpaulinhox

Pessoal este é meu primeiro tópico aqui no GUJ e tenho o seguinte problema.

quer ler um arquivo que contém várias linhas, cada linha representa um nome, exemplo

Paulo
João
Maria

queria fazer o seguinte:
No meu form eu tenho um JComboBox e sei que da pra passar um vetor para o comboBox como parâmetro, então eu queria ler o arquivo com o FileReader e BufferedReader e colocar em um vetor de String[] para passar para o JComboBox.

12 Respostas

von.juliano

Lembre-se de antes de abrir um tópico procurar primeiro no fórum, isso que você quer fazer é fácil de encontrar aqui.

Tutorial sobre manipulação de arquivos:
http://www.guj.com.br/java.tutorial.artigo.13.1.guj

Blz? Flw! :thumbup:

ViniGodoy

A partir do Java 5, a classe Scanner faz esse tipo de coisa com muito mais facilidade. Dê uma olhada!

xpaulinhox

Então, o tutorial que foi citado eu já li mas não explica como fazer o que eu quero.no tutorial é explicado como ler uma linha mas não explica como ler várias linha e coloca-las em um array.

String[] arquivo = new String[5];
			try{			
				entrada = new FileReader("c:\responsaveis.txt");
				leitor = new BufferedReader(entrada);
				int c = 0;
				String linha = null;
				
				while((linha = leitor.readLine()) != null)  {
					arquivo[c] = leitor.readLine();
					c++;					
					
					
					
				}
			}catch(IOException e){
				System.out.println("erro");
				
			}

                        cbResponsavel = new JComboBox(arquivo);
			cbResponsavel.setBounds(181, 126, 121, 20);
			getContentPane().add(cbResponsavel);

com este código tem 2 problemas, o primeiro que eu tenho que citar um valor, sendo que se eu incluir mais nomes no arquivo eu vou ter que mudar o tamanho do vetor, daí pensei em colocar ao invés de vetor em um ArrayList, mas não consigo passar um ArrayList para o comboBox, e o outro problema é ta lendo apenas a primeira linha do arquivo.

e agora?

ViniGodoy

Carregue os nomes num ArrayList mesmo.

O DefaultComboBox model não aceita ArrayList. Você tem duas alternativas.

  1. Usar o método toArray();
  2. Fazer um ComboBox model que aceite ArrayList.

A primeira opção é mais fácil.

Mas a segunda é a melhor opção.
Uma vez pronto, você usa sempre esse combobox model e descarta o antigo.
E você pode adicionar métodos mais convenientes do que os atuais da combo.

ViniGodoy

PS: Se você tivesse seguido a minha dica e tivesse olhado a classe scanner, o seu método de leitura do arquivo estaria simples assim:

Scanner in = new Scanner("c:\responsaveis.txt");
List<String> lines = new ArrayList<String>();
        
while (in.hasNextLine()) {
   lines.add(in.nextLine());        
}

in.close();

cbResponsavel = new JComboBox(new DefaultComboBoxModel(lines.toArray()));
cbResponsavel.setBounds(181, 126, 121, 20);  
getContentPane().add(cbResponsavel);
ViniGodoy

Atualizei o código ali em cima, para mostrar a parte da combo também.

Outra coisa. Não use o layout nulo. Procure algum gerenciador de layout como o gridbag, border e flowlayout. Ou use o Netbeans para fazer o layout para você.
O Null layout não permite que a janela seja redimensionada, não funciona em multiplos look&feel e não é multi-plataforma.

xpaulinhox

opa valew pelas dicas vini não sabia disto sobre os layouts é que eu uso o jigloo para layout mas vo tirar o nulo então.

cara fiz o seguinte código como você mencionou

int c = 0;
			
				Scanner scan = new Scanner("c:\responsaveis.txt");
				
				
				
				String linha = null;				
				while(scan.hasNextLine()) {
					lista.add(scan.nextLine());

				}	
				scan.close();	
						
			
			DefaultComboBoxModel cbModel= new DefaultComboBoxModel(lista.toArray());
			cbResponsavel = new JComboBox(cbModel);
			cbResponsavel.setBounds(181, 126, 121, 20);
			getContentPane().add(cbResponsavel);

mas o resultado que ta voltando no comboBox é “c:\responsaveis.txt” e não o conteúdo do arquivo, sabe o que pode ser??

ViniGodoy

Sim, falha minha.

Ao invés de criar assim:

Scanner in = new Scanner("c:\responsaveis.txt");

Crie assim:

Scanner in = new Scanner(new File("c:\responsaveis.txt"));
LPJava

[quote=ViniGodoy]Sim, falha minha.

Ao invés de criar assim:

Scanner in = new Scanner("c:\responsaveis.txt");

Crie assim:

Scanner in = new Scanner(new File("c:\responsaveis.txt"));

a classe Scanner permite a leitura do arquivo?

xpaulinhox

Bah vlw vini deu certinho cara, vlw msm, eu nem sabia que Scanner lia arquivo.
^^

Vivendo e aprendendo.

vlw rapaziada

ViniGodoy

A classe Scanner lê qualquer Inputstream em busca de tokens.
Isso inclui o System.in, arquivos, sockets, etc…

LPJava

ViniGodoy:
A classe Scanner lê qualquer Inputstream em busca de tokens.
Isso inclui o System.in, arquivos, sockets, etc…

é verdade tinha esquecido hehe nao estudei muito essa parte de token para certificacao nao… maior nó isso uhauha :slight_smile:

Criado 15 de julho de 2008
Ultima resposta 16 de jul. de 2008
Respostas 12
Participantes 4