Webly: [Java] Abrindo e escrevendo um arquivo "txt" - Webly

Ir para

Regras para postagem

É permitido postar livremente respostas com comentários, testes e avaliações dos scripts. Postagens contendo dúvidas sobre o script, deverão ser postadas no fórum principal de JSP.

IMPORTANTE: Todos os tutoriais postados neste fórum irão automaticamente para o portal Webly. Contribua você também e faça parte da equipe de colaboradores que fazem a evolução da web. Obrigado.
Página 1 de 1

[Java] Abrindo e escrevendo um arquivo "txt" Utilizando o pacote "io" Avaliar tópico: -----

#1 Membro offline   Thiago Ananias Ícone

  • Ícone
  • Grupo: Moderadores
  • Posts: 1033
  • Cadastrado: 14-julho 06
  • Localização:São Paulo - SP

Postou 29 agosto 2006 - 05:09

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextArea;

import java.awt.Container;
import java.awt.Dimension;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;
import java.io.FileWriter;

public class Ler extends JFrame implements ActionListener {

	private JTextArea	   TxtArquivo;
	private JFileChooser	Arquivo;
	private JButton		 CmdEscolher, CmdSalvar;
	private JScrollPane	 js;

	private void setCenter(JFrame frame) {

		Dimension paneSize	  = frame.getSize();
	 Dimension screenSize	= frame.getToolkit().getScreenSize();
	 frame.setLocation( (screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2);

	}

	public Ler(){

		setSize(400, 300);
		setResizable(false);
		setTitle("Abrindo um arquivo TXT");
		setCenter(this);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		Container cp = getContentPane();
		cp.setLayout(null);

		Arquivo	 = new JFileChooser(".");

		CmdSalvar = new JButton("Salvar arquivo");
		CmdSalvar.setBounds(50,10,140,25);
		CmdSalvar.addActionListener(this);
		cp.add(CmdSalvar);

		CmdEscolher = new JButton("Escolher arquivo");
		CmdEscolher.setBounds(200,10,140,25);
		CmdEscolher.addActionListener(this);
		cp.add(CmdEscolher);

		TxtArquivo = new JTextArea();
		TxtArquivo.setLineWrap(true);
		js = new JScrollPane(TxtArquivo);
		js.setBounds(5,40,385,210);
		js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		cp.add(js);

	}

	public void actionPerformed(ActionEvent e){
		
		if(e.getSource() == CmdEscolher){

			int res = Arquivo.showOpenDialog(this);

			if(res == JFileChooser.APPROVE_OPTION){
				File arq = Arquivo.getSelectedFile();
				try{
					TxtArquivo.setText(retornaString(arq.getPath()));
				} catch(Exception ex){
					JOptionPane.showMessageDialog(null, "Não foi possível abrir o arquivo" +  arq.getPath() + "!", "Leitura de arquivo", JOptionPane.ERROR_MESSAGE);
				}
			}

		}

		if(e.getSource() == CmdSalvar){

			int res = Arquivo.showSaveDialog(this);
			if(res == JFileChooser.APPROVE_OPTION){
				File arq = Arquivo.getSelectedFile();
				try{
					escreveArquivo(TxtArquivo.getText(), arq.getPath());
				} catch(IOException ioe){
					JOptionPane.showMessageDialog(null, "Não foi possível salvar arquivo!");
				}
			}

		}

	}

	public String retornaString(String fileName) throws IOException {

		BufferedReader in = new BufferedReader(new FileReader(fileName));
		String line;
		StringBuffer buffer = new StringBuffer();

		while( (line = in.readLine()) != null ){
			buffer.append(line + "\n");
		}

		in.close();
		return buffer.toString();

	}

	public void escreveArquivo(String conteudo, String fileName) throws IOException {

		PrintWriter out = new PrintWriter(new FileWriter(fileName));
		out.print(conteudo);
		out.close();
		JOptionPane.showMessageDialog(null, "Arquivo salvo com sucesso!");

	}

	public static void main(String args[]) {

		Ler app = new Ler();
		app.show();

	}

} 

Como prometido !! tah ae pessoal !
B)
Nhenhenhê, tititi, blábláblá!!
0

#2 Membro offline   felippe Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 1
  • Cadastrado: 21-novembro 06

Postou 21 novembro 2006 - 01:07

ola thiago,
sera que voce poderia me ajudar em fazer uma leitura de um simples txt e me dar a opcao de inserir novos dados atraves do showInput e somar oq ja tenho no txt mais oq estou digitando e sempre me mostrar resultados somatorios, ou enfim, qualquer tipo de calculo que eu desejar executar.
grato
0

#3 Membro offline   Thiago Ananias Ícone

  • Ícone
  • Grupo: Moderadores
  • Posts: 1033
  • Cadastrado: 14-julho 06
  • Localização:São Paulo - SP

Postou 21 novembro 2006 - 01:19

Como assim? vc quer abrir um TXT ler oq tem dentro dele e CONCATENAR com uma variavel que vc vai armazenar o valor vindo de um JOptionPane.showInputDialog("")??
Nhenhenhê, tititi, blábláblá!!
0

#4 Membro offline   AndersonDutra Ícone

  • São José - Águia do Vale - Garra e União
  • Ícone
  • Grupo: Membro Amigo
  • Posts: 611
  • Cadastrado: 18-julho 06
  • Localização:São José dos Campos-SP

Postou 21 novembro 2006 - 01:24

Aproveitando o tópico. Se eu quiser fazer o seguinte. Tenho um texto assim:

Inicio

Hello Word

Fim

Quero identifica a palavra Fim e inserir antes dela. Como eu faço isso??
Se vc está lendo isso meus parabéns!!! Isso quer dizer que vc sabe ler!!!!! \o/

"A vingança nunca é plena, mata a alma e envenena" - Seu Madruga

Frases de um grande Filósofo, Homer Simpson:
"Eu não sou um cara muito religioso. Mas se você estiver aí, por favor me salve, Super Homem!"
"Donuts!! Há alguma coisa que eles não possam fazer??"
"As três pequenas frase que o vão ajudar ao longo da vida:
N.º1 - Ajude-me! N.º2 - Oh, boa ideia, chefe! N.º3 - Já era assim quando aqui cheguei.."
e por último, sua maior e melhor frase:
"Doh!"
0

#5 Membro offline   Thiago Ananias Ícone

  • Ícone
  • Grupo: Moderadores
  • Posts: 1033
  • Cadastrado: 14-julho 06
  • Localização:São Paulo - SP

Postou 21 novembro 2006 - 01:30

Anderson isso eh manipular String, veja os metodos indexOf e substring, são iguais ao javascript!
Nhenhenhê, tititi, blábláblá!!
0

#6 Membro offline   knegra Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 2
  • Cadastrado: 05-dezembro 07

Postou 05 dezembro 2007 - 04:48

olá thiago ananias..

em primeiro lugar, quero-te dizer que tens tópicos muito bons...

em segundo lugar, eu registei-me, após ter experimentado este código que aqui postaste, e que já o compilei.. o problema é que é demasiado bom para o que eu preciso..

não podes fazer algo mais simples.. o que eu precisava era, de abrir um ficheiro txt, e depois poder adicionar, remover e editar os dados contidos nesse file..

na verdade eu vou usar isso em 3 files.. o que estou a fazer é um club de video, e entaõ vou ter um txt com a informacao dos filmes(cod, nome, ano, realizador..) outro para os socios (morada, nome, telefone, cod), e outro para registar os filmes que cada socio alugou (nome socio, cod socio, cod filme, nome filme, data)..

não poderas arranjar algo para que eu apartir daí possa concluir e completar...

desde já obrigado.. comprimentos ;-) :thumbsup:
0

#7 Membro offline   Daniel Vidal Ícone

  • webly@workaholic.to.nessa
  • Ícone
  • Grupo: Administradores
  • Posts: 1113
  • Cadastrado: 27-outubro 06
  • Localização:São Caetano do Sul - SP

Postou 05 dezembro 2007 - 05:45

Se puderes esperar até amanhã cedo poderei te ajudar, pois onde trabalho fiz um código exatamente igual ao que tu precisaste.
:)
===== Não sei de nada, mas sou cheio de ideias =====
0

#8 Membro offline   Daniel Vidal Ícone

  • webly@workaholic.to.nessa
  • Ícone
  • Grupo: Administradores
  • Posts: 1113
  • Cadastrado: 27-outubro 06
  • Localização:São Caetano do Sul - SP

Postou 06 dezembro 2007 - 12:41

classe para gravar:
true (OBS) -> Indica que a cada abertura para escrita, serão adicionados caracteres no txt, se for false, a cada chamada ele "zera" o texto.
public static void gravaArquivo() throws IOException {
		FileOutputStream conexao = new FileOutputStream(new File("c:/arquivo.txt), true); // OBS

		String test;	 

		test = "Esse é um \nARQUIVO TXT!"

		try {	  
			conexao.write((test).getBytes());		 
			conexao.write(("\n").getBytes());

			conexao.close();
		} catch (Exception e) {
			conexao.close();
		}
	}


classe para ler:
public static void leArquivo() {
		try {
			BufferedReader arquivo = new BufferedReader(new FileReader("c:/arquivo.txt"));

			while (arquivo.ready()) {			
				System.out.println(arquivo.readLine().toString());
				arquivo.readLine();
		   }
			arquivo.close();		  
		} catch (IOException e) {
		   //tratar excessão caso arquivo não for encontrado
		}
	}


Espero ter ajudado..
:)
===== Não sei de nada, mas sou cheio de ideias =====
0

#9 Membro offline   knegra Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 2
  • Cadastrado: 05-dezembro 07

Postou 06 dezembro 2007 - 08:26

obrigado.. ajudou bastante...

vou continuar, quando surguir alguma duvida conto contigo...

cmps.. ;-)
0

#10 Membro offline   Cunha Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 4
  • Cadastrado: 17-março 09

Postou 17 março 2009 - 09:13

Pessoal,

Tenho que recriar uma base de dados a partir de relatórios em formato TXT. O problema é que o Relatório não está tabulado, cada linha tem um comportamento diferente. Estava pensando fazer algo do tipo de um compilador para reconhecer o que tem em cada linha e armazenar nas variáveis e tabelas.
Consegui fazer uma primeira etapa baseada em tabulação com um monte de IF mas tá muito lento e sujeito a erros caso haja o pulo de alguma linha ou alteração de caractere.
Alguém já tem algo parecido?
Um abraço,

Cunha.
0

#11 Membro offline   Daniel Vidal Ícone

  • webly@workaholic.to.nessa
  • Ícone
  • Grupo: Administradores
  • Posts: 1113
  • Cadastrado: 27-outubro 06
  • Localização:São Caetano do Sul - SP

Postou 17 março 2009 - 10:43

Ter algo paracido pronto não, mas podemos chegar a uma solução juntos ;)

Diz o que vc precisa fazer, do que se trata essa base e posta alguns exemplos de linhas da sua base pra que possamos tentar achar nosso critério de quebra de atributos...
;)
===== Não sei de nada, mas sou cheio de ideias =====
0

#12 Membro offline   Cunha Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 4
  • Cadastrado: 17-março 09

Postou 17 março 2009 - 02:43

1 – Encontrar o “X” (Caractere de controle de nova página)

- Pula as linhas do sumário do relatório até encontrar o “X”



2 – Enquanto não for fim de arquivo

2.1 - Verifica se é “X”?

- Sim – Então Pula 3 linhas

- Não – Move o cursor 4 posições para a direita e armazena o conteúdo na variável de 4 caracteres ControleLinha.

2.2 – Verifica se ControleLinha não é igual a “----” ou “TOTA”?

- Sim – Verifica o tamanho da linha

2.3 – Verifica se ControleLinha é numérico?

- Não – Então é “CLASSE”

- Sim

2.4 – Tamanho é maior do que 3?

- Sim – Então é “TIPO”

- Não – Posiciona o cursor na 7ª posição a direita e armazena o conteúdo na variável de 4 caracteres ControleLinha.

2.5 – Verifica se é maior que 6?

- Sim – Então é “ITEM”

- Não – Então é “SERVIÇO”
0

#13 Membro offline   Cunha Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 4
  • Cadastrado: 17-março 09

Postou 17 março 2009 - 02:53

Quote

L
L
L S U M Á R I O
L
LDADOS DO RELATÓRIO
L+----------------------------------------------------------------------------------------------------------------------------------+
L| NOME : AAA.999-99 EMISSÃO : 00/00/2009 10:32:16 |
L| DESCRIÇÃO : AAAAAAAAAAAAAAAAAAAAAAAA |
L| VERSÃO : 00 |
L+----------------------------------------------------------------------------------------------------------------------------------+
L
LDADOS DA SOLICITAÇÃO
L+----------------------------------------------------------------------------------------------------------------------------------+
L| PROTOCOLO : 000000000 |
L| USUÁRIO : x00000 - AAAAAAAAAAAAAAAAA |
L| LOTAÇÃO : SAO PAULO |
L| PARÂMETROS : |
L| ABRANGÊNCIA : NACIONAL |
L| LOCALIDADE : AAAAAAAAAAAA |
L| VÍNCULO : TODOS |
L| DATA DE PREÇO : 01/2000 |
L| NÍVEL DE PREÇO : MEDIO |
L| ENCARGOS : S |
L| CLASSES A SUPRIMIR : NENHUMA |
L| |
L| |
L+----------------------------------------------------------------------------------------------------------------------------------+
TPCI.999.00 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA EMISSãO: 00/00/2000 AS 10:32:16
CENCARGOS SOCIAIS SOBRE PREÇOS DA MÃO-DE-OBRA: 000,00%(HORA) 00,00%(MÊS)
CABRANGÊNCIA : NACIONAL LOCALIDADE : AAAAAAAAAAAA
CREF.COLETA : MEDIANO DATA DE PREÇO : 00/2009
X CÓDIGO |D E S C R I Ç Ã O |UNIDADE |CUSTO TOTAL
LVÍNCULO.....: NACIONAL
L
L ASTU ASSENTAMENTO DE TUBOS E PECAS
L 0045 FORNEC E/OU ASSENT DE TUBO DE FERRO FUNDIDO JUNTA ELASTICA
L 23426 FORNECIMENTO E ASSENTAMENTO SIMPLES DE TUBOS E PECAS DE F0F0.
L 23426/001 TUBOS E PECAS, JUNTA ELASTICA, DIAMETRO 200 MM - K7 M 312,62
L 23426/002 TUBOS E PECAS, JUNTA ELASTICA, DIAMETRO 150 MM - K7 M 239,16
L 23426/003 TUBOS E PECAS, JUNTA ELASTICA, DIAMENTO 100 MM - K7 M 226,46
L 23477 MODULO TIPO - REDE DE AGUA > FORN. E ASSENTAMENTO DE TUBOS DE F0F0:
L COMPREENDE LOCACAO DA OBRA, CADASTRAMENTO DE INTERFERENCIAS, ESCAVACAO
L DE VALA, EXCETO ROCHA, ATE A PROFUNDIDADE DE 1,50 METROS.
L INCLUI - CARGA,TRANSPORTE E DESCARGA DO MATE
L 23477/001 MODULO TIPO: REDE DE AGUA, COM FORNECIMENTO E ASSENTAMENTO DE TUBO FºF M 316,81
L º DN 200 MM-K7, COMPREENDENDO: LOCACAO, CADASTRAMENTO DE INTERFERENCIA
L S, ESCAVACAO E REATERRO COMPACTADO DE VALA, EXCETO ROCHA, ATE 1,50 M.
L 23477/002 MODULO TIPO: REDE DE AGUA, COM FORNECIMENTO E ASSENTAMENTO DE TUBO FºF M 242,79
L º DN 150 MM-K7, COMPREENDENDO: LOCACAO, CADASTRAMENTO DE INTERFERENCIA
L S, ESCAVACAO E REATERRO COMPACTADO DE VALA, EXCETO ROCHA, ATE 1,50 M.
L 23477/003 MODULO TIPO: REDE DE AGUA, COM FORNECIMENTO E ASSENTAMENTO DE TUBO FºF M 230,34
L º DN 100 MM-K7, COMPREENDENDO: LOCACAO, CADASTRAMENTO DE INTERFERENCIA
L S, ESCAVACAO E REATERRO COMPACTADO DE VALA, EXCETO ROCHA, ATE 1,50 M.
L 0047 FORNEC E/OU ASSENT DE TUBO DE PVC COM JUNTA SOLDADA
L 26281 ASSENTAMENTO DE REDE DE AGUA - MMA
L 26281/001 DIAMETRO 50 MM M 19,70
L 26281/002 DIAMETRO 25 MM M 15,42
L 0048 FORNEC E/OU ASSENT DE TUBO DE PVC COM JUNTA ELASTICA
L 10515 FORNEC/ASSENTAMENTO DE TUBOS P/REDE COLETORA MM
L 10515/001 FORNEC/ASSENTAMENTO DE TUBOS DE PVC COM JUNTA ELÁSTICA P/REDE COLETORA M 10,93
L MMA D=100MM
L 10515/002 FORNEC/ASSENTAMENTO DE TUBOS DE PVC COM JUNTA ELÁSTICA P/REDE COLETORA M 22,30
X CÓDIGO |D E S C R I Ç Ã O |UNIDADE |CUSTO TOTAL
LVÍNCULO.....: NACIONAL


Vou tentar implementar o lastIndexOf que tem no fim do DEITEL, to apanhando em como tratar a leitura do texto linha por linha...
0

#14 Membro offline   Cunha Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 4
  • Cadastrado: 17-março 09

Postou 17 março 2009 - 03:10

Não está exibindo corretamente, para entender teria que trocar a fonte do texto para courier new. Como está na tela os espaços em branco sumiram.
0

#15 Membro offline   Daniel Vidal Ícone

  • webly@workaholic.to.nessa
  • Ícone
  • Grupo: Administradores
  • Posts: 1113
  • Cadastrado: 27-outubro 06
  • Localização:São Caetano do Sul - SP

Postou 17 março 2009 - 04:29

Ué..
Vc já tem a lógica inteira, o arquivo certinho...

O que vc não consegue é extrair os dados corretos para por no banco?
===== Não sei de nada, mas sou cheio de ideias =====
0

Página 1 de 1


Resposta rápida

  

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)