Adicionando linha de um .txt a um vetor

30 respostas
shadowjava

Editado

Olá Amigos !

Tenho um probleminha que gostaria de ajuda

gostaria de ler linha por linha num arquivo .txt
e adicionando num vetor o que que me for interessante na linha para poder ao fim criar um novo arquivo txt .

vcs teriam uma noção de como seria melhor fazer este exemplo.
Seria de grande ajuda não só para mim mas para muitos.

Muito obrigado!!! :wink:

30 Respostas

thegoergen

Tenta um getClass().getResource( caminho ).

eu lembro que eu já tentei fazer algo assim… vou procurar por aqui

shadowjava

Tenta um getClass().getResource( caminho ).

eu lembro que eu já tentei fazer algo assim… vou procurar por aqui

Po cara vê isso aê pra mim :smiley:

thegoergen

Tenta isso aqui…

ArrayList linhas = new ArrayList();
	    
		 BufferedReader reader = new BufferedReader( new InputStreamReader(
			    getClass().getResourceAsStream( filename ) ) );
		  
		  while ( true ) {
			String line = reader.readLine();
			// sem mais linhas para ler
			if ( line == null ) {
			      reader.close();
			      break;
			}
			
			// adiciona as linhas importantes
			if ( line == algoImportantePraTi ) {
			      linhas.add( line );
			}
		  }

Eu simplesmente copiei e colei aqui do meu arquivo, mas eu acho que funciona…

shadowjava

1. ArrayList linhas = new ArrayList(); 2. 3. BufferedReader reader = new BufferedReader( new InputStreamReader( 4. getClass().getResourceAsStream( filename ) ) ); 5. 6. while ( true ) { 7. String line = reader.readLine(); 8. // sem mais linhas para ler 9. if ( line == null ) { 10. reader.close(); 11. break; 12. } 13. 14. // adiciona as linhas importantes 15. if ( line == algoImportantePraTi ) { 16. linhas.add( line ); 17. } 18. }

Onde vc está trabalhando o ArrayList neste exemplo!

thegoergen

Na linha 16 eu adiciono a linah importante nele…

Aqui eu pegava as linhas que não começavam com “#”, porque eu não queria elas.
[EDIT]
OOOOps… eu alterei o código antes de postar, eu testo num IF, se for algoImportantePraTi, adiciona a linha no ArrayList… :wink:

Depois disso, você tem um Arraylist com todas as linhas importantes, e precisa gravá-las em um outro arquivo…

Talvez não tenha entendido a pergunta… :oops:

LPJava

shadowjava:
Editado

Olá Amigos !

Tenho um probleminha que gostaria de ajuda

gostaria de ler linha por linha num arquivo .txt
e adicionando num vetor o que que me for interessante na linha para poder ao fim criar um novo arquivo txt .

vcs teriam uma noção de como seria melhor fazer este exemplo.
Seria de grande ajuda não só para mim mas para muitos.

Muito obrigado!!! :wink:

o que vc ja implementou e que parte ficou com duvida?

thegoergen

Depois, você pega o ArrayList e grava num novo arquivo:

try {
		  FileOutputStream oStream = new FileOutputStream( nomeDoNovoArquivo ); // ou usando um File com argumento
		  OutputStreamWriter writer = new OutputStreamWriter(oStream);
		  
//Escreve todo o ArrayList...
		  for (int i = 0; i < linhas.size(); i++){ 
			writer.write(linhas.get(i).toString() + "\n");
		  }
		  writer.flush(); // grava
		  writer.close(); // fecha
	    } catch ( Exception e){
		  e.printStackTrace();
	    }

Talvez não compile, porque fiz agora aqui… mas a idéia é essa… hehehe :wink:

M

Estou só não sei como gravar somente as linhas que vc quer... nesse código estou copiando o arquivo inteiro de acordo com a linha e a posição que selecionei.

FileInputStream fis;

				fis = new FileInputStream(file.getAbsolutePath());
				InputStreamReader streamReader = new InputStreamReader(fis);
				BufferedReader reader = new BufferedReader(streamReader);

				String linha = reader.readLine();
				
				InputStream ori = null;
				OutputStream dest = null;
				byte[] buffer;

                                                                if (linha.substring(76, 79).equals("237")) {

					System.out.println(" BRADESCO [" + file.getName() + "]");
			
									
										
					ori = new FileInputStream(file);
					File f = new File(bcb.getPath() + "/" + file.getName());
					File f3 = new File (f.getPath());
					dest = new FileOutputStream(f);
					File f2 = new File(bcbRetornos.getPath() + "/" + file.getName());
					dest = new FileOutputStream(f2);
					buffer = new byte[ori.available()];
					ori.read(buffer);
					dest.write(buffer);
					
										
					dest.close();
					ori.close();
					buffer = null;
					reader.close();
shadowjava

[OFF]

for (int i ; i < lista.size(); i++){	
					Layout layout = lista.get(i);
					if (layout.tipo = "VARCHAR2");
				}
					
					//pstmt.setString(i, line.substring(lay.min,lay.max));
					
					else { (layout.tipo = "DATE")	
					}

alguem sabe me dizer onde estou errando!!!

thegoergen

Não entendi direito, mas não falta um IF ali??

for (int i ; i < lista.size(); i++){	
					Layout layout = lista.get(i);
					if (layout.tipo = "VARCHAR2");
				}
					
					//pstmt.setString(i, line.substring(lay.min,lay.max));
					
					else {
                                                   [b]IF [/b] (layout.tipo = "DATE")	
					}
jingle
for (int i ; i < lista.size(); i++){   
                     Layout layout = lista.get(i);  
                     //este if não esta fazendo nada aqui pois tem um ; no final dele
                     if (layout.tipo = "VARCHAR2");                    
                 }  
                       
                  //pstmt.setString(i, line.substring(lay.min,lay.max));  
                   //else sem o if??? ou intao onde esta o if? era pra ser aquele lá de cima? mas dai isto deve tar dentro do for.    
                   else { (layout.tipo = "DATE")     
                   }
shadowjava

Pronto galera , achei a definição do que queria e não estava conseguindo explicar?

  1. Ler o arquivo ****_layout.txt
    
  2. Criar uma array de objeto do tipo Layout.
    
  3. Para cada linha do arquivo ****_layout.txt
    

a. Criar um objeto Layout setando os atributos (Coluna,Tamanho,Inicio,Fim,Tipo)
b. Adicionar esse objeto num array ou lista de objetos Layout

  1. Ler o arquivo dos dados correspondert ****.txt
    
  2. Criar o SQL (INSERT INTO <TABELA> VALUES (?,?,?,?) ? Onde a quantidade de ?, é a quantidade de atributos, que na verdade corresponde ao tamanho do array criado anteriormente.
    
  3. Para cada linha no arquivo ****.txt setar os valores do ? , ou seja, para pedaço da linha, será setado no ? do PreparedStatement.
    
  4. Inserir no banco de dados, ate que seja fim de arquivo.
    
thegoergen

shadowjava:
Pronto galera , achei a definição do que queria e não estava conseguindo explicar?

  1. Ler o arquivo ****_layout.txt
    
  2. Criar uma array de objeto do tipo Layout.
    
  3. Para cada linha do arquivo ****_layout.txt
    

a. Criar um objeto Layout setando os atributos (Coluna,Tamanho,Inicio,Fim,Tipo)
b. Adicionar esse objeto num array ou lista de objetos Layout

  1. Ler o arquivo dos dados correspondert ****.txt
    
  2. Criar o SQL (INSERT INTO <TABELA> VALUES (?,?,?,?) ? Onde a quantidade de ?, é a quantidade de atributos, que na verdade corresponde ao tamanho do array criado anteriormente.
    
  3. Para cada linha no arquivo ****.txt setar os valores do ? , ou seja, para pedaço da linha, será setado no ? do PreparedStatement.
    
  4. Inserir no banco de dados, ate que seja fim de arquivo.
    

OK. Entendemos o que e para ser feito.

E agora, o que você já fez até agora? Não precisa colocar todo o código, só nos dê uma visão geral do algoritmo e coloque as partes do código com dúvida. Aquele código ali em cima estava totalmente errado…

shadowjava

Bem vamos lá !

por enquanto já fiz as seguintes tarefas:

Já criei uma classe encapsuladora com os gets e sets chamada layout .

e a classe manipulando_arquivos

parte do código!

import java.io.*;// * entrada e saída de dados * //
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Manipulando_Arquivos {

	public static void main(String args[]) {
		new Manipulando_Arquivos().executar();
	}

	public void executar() {
		
		Connection con = null;
		PreparedStatement pstmt = null;
		
		String sql = "INSERT INTO TB_TIPO_LEITO VALUES (?,?,?,?)";  // variavel do BD//

	
		
		List lista = new ArrayList(); // instanciando o ArrayList
		
		try {   // um try de leitura //
			FileInputStream stream = new FileInputStream("C:\Tabelas\tb_tipo_leito_layout.txt");   
			InputStreamReader streamReader = new InputStreamReader(stream);   
			BufferedReader reader = new BufferedReader(streamReader);  

			
			String line = null;   // variavel line   
			con = getConnection();  // metodo de conexão //
			while((line=reader.readLine())!=null) {  
				System.out.println(line.split(","));
				Layout lay = new Layout();
				String coluna;
				lay.setColuna(coluna);
				int fim;
				lay.setFim(fim);
				int tamanho;
				lay.setTamanho(tamanho);
				int inicio;
				lay.setInicio(inicio);
				String tipo;
				lay.setTipo(tipo);
				
				lista.add(lay);   // add do ArrayList
			}
shadowjava

Me mostrem o erro que se encontra agora

for (int i ; i < lista.size(); i++){     
			    Layout layout1 = (Layout) lista.get(i);    
			    // este if não esta fazendo nada aqui pois tem um ; no final
				// dele
			    if (layout1.getTipo()= "VARCHAR2");                       
			  
			         else 
			        	 
			        	 if  (layout.getTipo() = "DATE");       
			  }   
					
		}

não consigo achar o erro , me deu um branco aqui :lol:

thegoergen

O erro está aqui:

if (layout1.getTipo()= "VARCHAR2");

Tira aquele “;”

shadowjava

O erro persiste

// abrir o arquivo de layout
			Layout layout = new Layout();
			
			
			for (int i ; i < lista.size(); i++){     
			    Layout layout1 = (Layout) lista.get(i);    
			    // este if não esta fazendo nada aqui pois tem um ; no final
				// dele
			    
			    if (layout.getTipo()= "VARCHAR2")                      
			  
			}else{ 
			        	 
			        	 if  (layout.getTipo = "DATE")     
			  }   
					
		}
:cry:
shadowjava

Sobre a list ade tarefas como faço essa parte

a. Criar um objeto setando os atributos ( Coluna, tamanho , inicio , fim , tipo ) // até aqui ok

b. Adicionar um objeto num array ou lista de objetos Layout // não entendi

thegoergen

Faz assim para criar um array:

Layout[] L ;

Ou assim para um List ( Java 1.5 ):

List<Layout> L = new ArrayList<Layout>();
jingle
shadowjava:
O erro persiste
// abrir o arquivo de layout
			Layout layout = new Layout();
			
			
			for (int i ; i < lista.size(); i++){     
			    Layout layout1 = (Layout) lista.get(i);    
			    // este if não esta fazendo nada aqui pois tem um ; no final
				// dele
			    
			    if (layout.getTipo()= "VARCHAR2")                      
			  
			}else{ 
			        	 
			        	 if  (layout.getTipo = "DATE")     
			}   
					
		}
:cry:

bom amigo pra pelo menos copilar tente algo assim mas não sei que pretende fazer com isto

// abrir o arquivo de layout
Layout layout = new Layout();

for (int i ; i < lista.size(); i++){// <- chave que abre o for
 Layout layout1 = (Layout) lista.get(i);
			    
 if (layout.getTipo()= "VARCHAR2"){// <- chave que abre o if          
  //faça o que quer que aconteça quando o tipo for "VARCHAR2"
 }else if (layout.getTipo = "DATE"){// <- chave que abre o else if
  //faça o que quer que aconteça quando o tipo for "DATE"
 }//<- fechamento da chave do else if
}// <- chave que termina o for

tente ficar atento as chaves

shadowjava

vlw jingle + que bom que eu aceite antes de ver o seu codigo :wink:

Layout layout = new Layout();
			
			
			for (int i ; i < lista.size(); i++){     
			     layout = (Layout) lista.get(i);    
			    
			   if (layout.getTipo() == "Varchar2");
			   
			else{
				if  (layout.getTipo() == "DATE")
thegoergen
shadowjava:
vlw jingle + que bom que eu aceite antes de ver o seu codigo :wink:
Layout layout = new Layout();
			
			
			for (int i ; i < lista.size(); i++){     
			     layout = (Layout) lista.get(i);    
			    
			   if (layout.getTipo() == "Varchar2");
			   
			else{
				if  (layout.getTipo() == "DATE")

Continua errado!! Quando tu complia, não aparece a linha com erro??

shadowjava

por enquanto nem está rodando !
mais o erro não existe +.

mais quando rodar que eu vou ver o erro ( se tiver ).

agora com relação a outra coisa :

será que nesta tarefa eu vou precisar tokenizar alguma coisa ?

thegoergen

O uso do StringTokenize é desencorajado.

Está no JavaDoc da classe. Existem métodos na classe String que fazem tudo o que ele faz…

shadowjava

O uso do StringTokenize é desencorajado.

Está no JavaDoc da classe. Existem métodos na classe String que fazem tudo o que ele faz.

TERIA UM EXEMPLO ?

thegoergen

Exemplo de split??

String[] ss = "Diego Inácio Goergen".split(" ");

for(int i = 0; i < ss.length; i++{
System.out.println(ss[i]);
}
shadowjava

split é algo relacionado a tokenizer

shadowjava

[off]

outra duvida no exercicio , agora com try e catch

try {
				Connection con1;
				con.close();			
				Connection pstmt1;
				pstmt.close();
			    }
			
			
			 catch (SQLException e) {
				e.printStackTrace();
			    }
			 catch (Exception e) {
				e.printStackTrace();   // ESTÁ DANDO ERRO NESTE PONTO E VIRGULA//
				
				         }
thegoergen

Esqueça tokenizer. :wink:

Com split ele não é necessário

jingle
shadowjava:
[off] outra duvida no exercicio , agora com try e catch
try {
				Connection con1;
				con.close();			
				Connection pstmt1;
				pstmt.close();
			    }
			
			
			 catch (SQLException e) {
				e.printStackTrace();
			    }
			 catch (Exception e) {
				e.printStackTrace();   // ESTÁ DANDO ERRO NESTE PONTO E VIRGULA//
				
				         }

não tem nada de errado nesta no ";" que você disse ai.

única coisa que pode ter erro ai é no nome das varáveis ali em cima mas isto se elas não tiverem sido declaradas antes.

tente isto... (apesar de não fazer sentido)...

try {
            Connection con1 = null;
            con1.close();
            Connection pstmt1 = null;
            pstmt1.close();
        }
        
        
        catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();  
            
        }

tente dar uma lida em uns livros bases de java

aconselho estes.
- Java como programar 6 - Deitel
- Usando a cabeça Java!

Criado 25 de março de 2008
Ultima resposta 27 de mar. de 2008
Respostas 30
Participantes 5