Não consigo manipular Arquivo

7 respostas
R

Saudações,

Agora o problema é outro, enfim já consegui modelar as classes e carrega-las usando o Vector.
Agora o problema e ler isso de um arquivo e carregar no Vector :shock: . Sendo que já travei logo de cara. Li o artigo Aprendendo a manipular arquivos
do Guilherme Silveira , mas esta dando um erro. :frowning:

//import java.io.File;
//import java.io.FileWriter;
//import java.io.PrintWriter;
import java.io.FileReader;
import  java.io.BufferedReader;
class Arquivo{
	
	//public Arquivo(){
	//FileReader reader = new FileReader("arquivo.txt");
	//}
	public void carregaArquivo(){
	//	FileWriter writer = new FileWriter("arquivo.txt");
	}
	private FileReader reader = new FileReader("arquivo.txt");
	private BufferedReader leitor = new BufferedReader(reader);
}

Os comentários foram de tentativas, mas persistiu o mesmo erro.
O erro reportado é o seguinte:
C:\j2sdk1.4.2_05\classes\Teste\Arquivo.java:11: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
private FileReader reader = new FileReader(“arquivo.txt”);
^

Alguém poderia me ajudar nessa? :smiley:

7 Respostas

Rafael_Steil

Vc precisa colocar o codigo entre um try-catch

Rafael

R

Desculpe Rafael Steil , vc poderia ser um pouco mais especifico?

Como eu faria isso?

R
OK Compilou ficou assim
import java.io.FileReader;
import java.io.BufferedReader;

class Arquivo{
	
	public void carregaArquivo(){	
		try{	
			FileReader reader = new FileReader("arquivo.txt");
			BufferedReader leitor = new BufferedReader(reader);
		}	
		catch(Exception e){
			System.out.print("Erro: " + e); 
			System.exit(1); 
		}
	}
}
Sendo que ele não aceitou colocar o try fora do procedimento.Minha intensão seria criar o objeto reader e leitor como sendo uma propriedade privada da classe, para usar dentro dos metodos da classe, como no código abaixo
import java.io.FileReader;
import java.io.BufferedReader;

class Arquivo{
	
			try{	
			private FileReader reader = new FileReader("arquivo.txt");
			private BufferedReader leitor = new BufferedReader(reader);
		}	
		catch(Exception e){
			System.out.print("Erro: " + e); 
			System.exit(1); 
		}
	
}

Ocorre o seguinte erro:
C:\j2sdk1.4.2_05\classes\Teste\Arquivo.java:20: illegal start of type
try{
^
C:\j2sdk1.4.2_05\classes\Teste\Arquivo.java:28: expected

^
2 errors

Da forma que quero fazer é possível? Senão para cada metodo terei que colocar uma instancia da classe .

rigolin

Eu usei esta classe em um compilador que fiz…

Você tem que instanciar a classe de um JFrame que tenha um JTextArea (são os parâmetros do construtor)…

i) abrirá um dialogo para escolher o arquivo a ser lido;
ii) o conteúdo do arquivo será colocado na JTextArea do JFrame;

acho que vai te ajudar…

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextArea;
/**
 * Compilador
 *  
 * @author Roberto Rigolin 
 */
class AbrirListener implements ActionListener {

		private JTextArea taSaida;
		private JFrame frame;
		private String nomeArquivo = null;

		public AbrirListener( JFrame f, JTextArea ta ){

		taSaida = ta;
		frame = f;
		}

		public void actionPerformed( ActionEvent e ){
			try{

				JFileChooser fc = new JFileChooser();
				/*ExampleFileFilter filter = new ExampleFileFilter();
					filter.addExtension("java");
					filter.setDescription("Java Source");
					chooser.setFileFilter(filter);*/
				int returnVal = fc.showOpenDialog(frame);
				nomeArquivo = fc.getSelectedFile().getName();
				FileReader reader = new FileReader(nomeArquivo);
				BufferedReader leitor = new BufferedReader(reader);
				String fonte = null;
				while((leitor.readLine()!= null)) {
					fonte +="\n"+ leitor.readLine();
					System.out.println("Linha: " + leitor.readLine());
				}
				reader.close();
				leitor.close();
				taSaida.setText(fonte);
				frame.show();
			}
			catch( IOException ioex ){				
				ioex.printStackTrace();
			}
		}
	}

Você ganha de brinde a classe para salvar o conteúdo de uma JTextArea em um arquivo… é fácil modificala para outros propositos…

import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.swing.*;
import javax.swing.JTextArea;

/**
  * @author Roberto Rigolin
  * 
 * Esta classe salva o conte�do de uma TextArea em um arquivo 
 */
class SalvarListener implements ActionListener {

		private JTextArea taSaida;
		private JFrame frame;
		private String nomeArquivo = null;

		public SalvarListener( JFrame f, JTextArea ta ){

		taSaida = ta;
		frame = f;
		}

		public void actionPerformed( ActionEvent e ){
			try{
			
			//Testa se o arquivo j� tem nome
			if ( nomeArquivo == null ){
			//Se n�o tiver, cria uma caixa de dialogo para salvar o arquivo
			FileDialog fd = new FileDialog( frame, "Salvar como...",FileDialog.SAVE );
			fd.show();

			//Pega o nome do arquivo escolhido
			nomeArquivo = fd.getFile();
			//Decidiu cancelar
			if( nomeArquivo == null ){
			return; //Sair sem gravar


			}
			}
			//Abre um arquivo de saida com o nome selecionado
			PrintWriter out = new PrintWriter( new FileWriter( nomeArquivo ));

			//Grava o conteudo da area de texto e fecha o arquivo
			out.print( taSaida.getText());
			out.close();

			frame.setTitle( "Arquivo - "+ nomeArquivo );
			}
			catch( IOException ioex ){
			//Caso ocorra um erro de IO
			ioex.printStackTrace();
			}
		}
	}

Como as classe implementam a Interface ActionListener você pode usar assim:

abrirButton    = new JButton("Abrir");
salvarButton   = new JButton("Salvar");
		
abrirButton.addActionListener( new AbrirListener(this,ta1));	
salvarButton.addActionListener(new SalvarListener(this,ta1));

//Dentro de um JFrame é claro!

As classes não são elegantes, mas quebram um galho…

Abraços…

jgbt
rjmattos:
OK Compilou ficou assim Sendo que ele não aceitou colocar o try fora do procedimento.Minha intensão seria criar o objeto reader e leitor como sendo uma propriedade privada da classe, para usar dentro dos metodos da classe, como no código abaixo
vc não pode colocar um try/catch fora de um metodo. declare como atributo da classe, mas inicialize dentro do metodo.
public class LeArquivo {
  private FileReader file;

  public void lerArquivo() {
    try {
      file = new FileReade("arquivo.txt");
    }catch(IOException e) {
      System.out.println(e)
    }
  }

}

[]'s

R

rigolin orbigado pela classe , já peguei e coloquei no meu Bau de códigos.

jgbt realmente era isso que eu queria, obrigado. O trabalho esta saindo a passos de tartaruga mas esta indo.

Mas fiquei satisfeito com a linguagem, esta colocando muitas barreira e torcendo o nariz para fazer esse trabalho, mas a impressão em relação ao JAVA melhorou muito, realmente esbarro na falta de conhecimento da linguagem, ontem fiquei umas 2 horas para descobrir como tratar string.

Tinha um impressão ruim do JAVA pois sempre escutei falar que era “uma copia” do C orientado a objeto. E C particulamente ODEIO :twisted:, apesar de ser uma linguagem muito poderosa mas é um nivel muito avançado para o meu sadomassoquismo :shock:

Bem até a proxima barreira que eu encontrar… :lol:

gilberto_mogi

…Pessoal

Eu já todos as narrativas acima, mas mesmo assim o meu fonte esta dando esta mensagem de erro e eu não acertei ainda onde colocar o tratamento de erro. Vocês podem me ajudar :

C:\PROGJAVA\entrada.java:129: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
ChecaArq(TX_ArqEnt.getText());}}
^
1 error

Process completed.

Abaixo, o fonte :

import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.io.File;
import java.io.*;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileNotFoundException;



class entrada extends JFrame{
	JButton             BT_Confirma,BT_Sair;
    JLabel              ImgFundo;
    JLabel              LB_Titulo,LB_ArqEnt,LB_ArqSai,WCx_Senha;
	
	JFormattedTextField TX_ArqEnt,TX_ArqSai; 
	MaskFormatter       MascArqEnt,MascArqSai;
        
    JList WLista;
          String Op_Lista[]={"01-JList","02-JList","03-JList"};                                         	 	    
       
    JComboBox WCombo;
          String Op_Combo[]={"01-JComboBox","02-JComboBox","03-JComboBox"};                                         	 	    
       
    JCheckBox       WCk01,WCk02,WCk03,WCk04,WCk05;
    JRadioButton    WRd01,WRd02,WRd03;
    JPasswordField  WDs_Senha;
    
    
   
    
       
    
    //****    
    public entrada(){
						
		   //*** Exibe Tela Principal(dialog)	
	  	   super("MARPRESS INFORMÁTICA");
		   Container tela=getContentPane();
	       //tela.setBackground(new Color(200,250,199));
	       setLayout(null);
	   
	       //*** Exibe imagem na tela, como se fosse papel de parede...
           ImageIcon icone=new ImageIcon("C:\PROGJAVA\logo_marpress.gif");  
                     ImgFundo=new JLabel(icone); 
           	         ImgFundo.setBounds(625,000, 380,200); 	
	                 tela.add(ImgFundo); 
	   
	       //*** Exibe o pedido de Senha, só para exibição na tela
	       WCx_Senha=new JLabel("Acesso : ");
	           WCx_Senha.setBounds(650,300,150,030);
	           WCx_Senha.setForeground(Color.red);      
               WCx_Senha.setFont(new Font("Arial",Font.BOLD,20)); 
               tela.add(WCx_Senha);   
	       WDs_Senha=new JPasswordField(10);
	   	       WDs_Senha.setBounds(750,300,150,030);
	           WDs_Senha.setForeground(Color.blue);           
               WDs_Senha.setFont(new Font("Arial",Font.BOLD,20)); 
               WDs_Senha.setBackground(Color.orange);             
	           WDs_Senha.setEchoChar('#');
	           tela.add(WDs_Senha);   
	   
	       //*** Rotina do JList
           WLista=new JList(Op_Lista);
             WLista.setVisibleRowCount(5);
             JScrollPane painel_lista=new JScrollPane(WLista);
             WLista.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
             painel_lista.setBounds(40,250,150,100);
             WLista.setForeground(Color.white);                     
             WLista.setFont(new Font("Arial",Font.BOLD,17));   
             WLista.setBackground(Color.blue);                   
             tela.add(painel_lista);	 	   
	   
	       //*** Rotina do JComboBox
           WCombo=new JComboBox(Op_Combo);
                 WCombo.setMaximumRowCount(5);
                 WCombo.setBounds(40,400,150,030);
                 WCombo.setForeground(Color.blue);                
                 WCombo.setFont(new Font("Arial",Font.BOLD,17));  
                 WCombo.setBackground(Color.orange);              
                 tela.add(WCombo);	 	   
	
	       //*** Rotina do JCheckBox
	       WCk01=new JCheckBox("01-JCheckBox");
	             WCk01.setBounds(050,470,150,30);   
	             tela.add(WCk01);
	       WCk02=new JCheckBox("02-JCheckBox");
	             WCk02.setBounds(050,500,150,30);   
	             tela.add(WCk02);
	       WCk03=new JCheckBox("03-JCheckBox");
	             WCk03.setBounds(050,530,150,30);   
	             tela.add(WCk03);
	       WCk04=new JCheckBox("04-JCheckBox");
	             WCk04.setBounds(050,560,150,30);   
	             tela.add(WCk04);
	       WCk05=new JCheckBox("05-JCheckBox");
	             WCk05.setBounds(050,590,150,30);   
	             tela.add(WCk05);
	   
	       //*** Rotina do JRadioButton
           ButtonGroup WGrupo = new ButtonGroup();
           WRd01=new JRadioButton("01-JRadioButton");
                 WRd01.setBounds(050,650,150,30);
                       WGrupo.add(WRd01);
                       tela.add(WRd01);                                         
           WRd02=new JRadioButton("02-JRadioButton");
                 WRd02.setBounds(050,680,150,30);
                       WGrupo.add(WRd02);      
                       tela.add(WRd02);
           WRd03=new JRadioButton("03-JRadioButton");
                 WRd03.setBounds(050,710,150,30);
                       WGrupo.add(WRd03);
                       tela.add(WRd03);
        
           //*** Define Botões
		   UIManager.put("ToolTip.background",Color.orange);
		
		    
	       BT_Confirma=new JButton("Confirma");
		      BT_Confirma.setBounds(600,650,150,90);
		      BT_Confirma.setForeground(Color.blue);	
    	      BT_Confirma.setFont(new Font("Arial",Font.BOLD,20));
              BT_Confirma.setToolTipText("Confirma os Dados Acima Digitados...");
              BT_Confirma.addActionListener(new ActionListener(){
                 public void actionPerformed(ActionEvent e){
            	             ChecaArq(TX_ArqEnt.getText());}}
            	                            );
                 tela.add(BT_Confirma);
	        
	       BT_Sair    =new JButton("Sair");
	  	      BT_Sair.setBounds(800,650,150,90);
	  	      BT_Sair.setForeground(Color.red);			
		      BT_Sair.setFont(new Font("Arial",Font.BOLD,20));
              BT_Sair.setToolTipText("Sair do Sistema...");
              BT_Sair.addActionListener(new ActionListener(){
                 public void actionPerformed(ActionEvent e){
            	    int opcao;
            	    Object[] BT_Sair ={"Sim","Não"}; 
            	    opcao=JOptionPane.showOptionDialog(null,"Deseja Realmente SAIR ?","SAIR",
            	          JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,BT_Sair,BT_Sair[0]);
            	          if(opcao==JOptionPane.YES_OPTION)
                                    System.exit(0);}});
              tela.add(BT_Sair);
		   
		   
		   
		   
		   //*** Define o conteúdo dos Labels
		   LB_Titulo = new JLabel("MALA DIRETA");
		   LB_ArqEnt = new JLabel("Arquivo de Entrada");
		   LB_ArqSai = new JLabel("Arquivo de Saída");

		   //*** Mascaras/Pictures dos Campos
		   try{
	          MascArqEnt = new MaskFormatter("************");
	          MascArqSai = new MaskFormatter("************");
	          MascArqEnt.setPlaceholderCharacter('*');   
	          MascArqSai.setPlaceholderCharacter('*');
	          TX_ArqEnt = new JFormattedTextField(MascArqEnt);
	          TX_ArqSai = new JFormattedTextField(MascArqSai);
	          }
           catch(ParseException excp){}	   
	      
	       //*** Posicionamento dos JLabel : (Col,Lin,Compr,Alt)
	   	   LB_Titulo.setBounds(350, 20,470,30);
	       LB_ArqEnt.setBounds( 50, 90,300,25);
 	       LB_ArqSai.setBounds( 50,130,300,25);
		
		   //*** Posicionamento dos JTextField: (Col,Lin,Compr,Alt)
		   TX_ArqEnt.setBounds(300, 90, 200,30);
           TX_ArqSai.setBounds(300,130, 200,30);
	   		 
	  	   //*** Define as Cores dos JLabel 
 	       LB_Titulo.setForeground(Color.blue);
	       LB_ArqEnt.setForeground(Color.blue);
	       LB_ArqSai.setForeground(Color.blue);
				
		   //*** Define as Cores dos JTextField 
		   TX_ArqEnt.setForeground(Color.orange);
           TX_ArqSai.setForeground(Color.orange);		
	
		   //*** Define as Fontes dos JLabel  
	       LB_Titulo.setFont(new Font("Arial",Font.BOLD,36));
  		   LB_ArqSai.setFont(new Font("Arial",Font.BOLD,25));
  		   LB_ArqEnt.setFont(new Font("Arial",Font.BOLD,25));
	 	
	  	   //*** Define as Fontes dos JTextField  
		   TX_ArqEnt.setFont(new Font("Arial",Font.BOLD,25));
           TX_ArqSai.setFont(new Font("Arial",Font.BOLD,25));
	
	       //*** Atribui ao objeto TELA, os JLabel 
	       tela.add(LB_Titulo);
	       tela.add(LB_ArqEnt);
	       tela.add(LB_ArqSai);
	    	    
	       //*** Atribui ao objeto TELA, os JTextField 
	       tela.add(TX_ArqEnt);
	       tela.add(TX_ArqSai);
		
		 
		   //*** sempre no final!!			
		   setSize(1000,800);
		   setVisible(true);
	       setLocationRelativeTo(null);
	    
    } 
	
	
	//**************************************************************************
	// ativa os objetos na tela, ou seja, executa as operações	
	public static void main(String args[]){
		entrada app=new entrada();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
	
	
	// verifica a existencia do arquivo de entrada
	// throws FileNotFoundException, IOException 
	
	public static void ChecaArq(String NmArq) throws FileNotFoundException, IOException {
		   File WProcArq = new File(NmArq);
		   if (!WProcArq.isFile())  {
		   	  JOptionPane.showMessageDialog(null,"Arquivo Inexistênte! "+NmArq,"ERRO",JOptionPane.ERROR_MESSAGE);
		      // depois dar um jeito de retornar lá pra cima.....
		   }
          
           
           // Lê o arquivo de texto
           FileReader     reader  = new FileReader(WProcArq);
           BufferedReader leitor  = new BufferedReader(reader);    
                    String linha  = null;	
                    String fonte  = null;	
                    
                    while((linha=leitor.readLine())!=null) {  
                    	 fonte +="\n"+ leitor.readLine();  
                    }	   
           leitor.close();
           reader.close();
}
}

EDIT - Ponha as tags CODE quando postar código. Basta clicar no botãozinho “CODE” que está ao lado do título “Corpo da Mensagem”.

Criado 29 de dezembro de 2004
Ultima resposta 10 de nov. de 2008
Respostas 7
Participantes 5