Fórum ler arquivo , alterar e gravar #569493

24/03/2010

0

:00ps: boa tarde ! sou novo aqui no forum e tb em java : e tenho uma pergunta estou fazendo um programinha que leia um txt altere as suas linhas e depois grave : esse programa é semelhente ao que o substituir do bloco de notas faz , eu quero que o usuari passe duas palavras como parametro a palvra que vai ser alterada e a palvara que altera , abaixo segue o código : ahhh como não consegui passar as palavras como parametro tava fazendo um teste para trocar letra minuscula por maiuscula .... import java.io.*; public class processartexto { public static void main (String [] args) throws Exception{ // nesta parte eu checo se os arquivos foram passados como parametro if(args.length != 2){ System.out.println("uso: java ProcessamentoTexto teste.txt novo.txt"); System.exit(1); } // aqui o programa le os arquivos o teste e o que vai se substituido FileInputStream stream = new FileInputStream("teste.txt"); InputStreamReader streamReader = new InputStreamReader(stream); BufferedReader reader = new BufferedReader(streamReader); FileWriter fileWriter = new FileWriter("novo.txt"); PrintWriter writer = new PrintWriter(fileWriter); // Neste while lemos o arquivo linha a linha String line = null; while( (line=reader.readLine() ) != null ) { // aqui transforma // as letras minúsculas em maiúsculas String novaLinha = line.toUpperCase(); writer.println(novaLinha); } // fechando os objetos de io: writer.close(); fileWriter.close(); reader.close(); streamReader.close(); stream.close(); } }
André Luiz

André Luiz

Responder

Posts

24/03/2010

André Silva

Poderias colocar seu códigos entrre as tags [.code][./code] (sem o .) E dentro do seu main, virá os arguments é só pegar e usar, não entendo qual sua dúvida? percebi que no seu código vc não usa os argumentos que passa e está jogando direto nos new File(xxxx); Qual seria sua dúvida afinal de contas?
Responder

Gostei + 0

25/03/2010

Diener Piske

Voc~e não deve fazer tudo isso no main. Cria outro método que faça isso, e chame ele apartir do main. se vc quer saber como apssar parametros pro método main é na hora da execução. por exemplo:
java processartexto palavra1 palavra2
isso faz com que no vetor args[] que o metodo main recebe como parametro venha preenchido com duas posições na posição 0 a palavra1 e na posição 1 a palavra2. espero ter ajudado
Responder

Gostei + 0

25/03/2010

André Luiz

[quote="Maveco"]Poderias colocar seu códigos entrre as tags [.code][./code] (sem o .) E dentro do seu main, virá os arguments é só pegar e usar, não entendo qual sua dúvida? percebi que no seu código vc não usa os argumentos que passa e está jogando direto nos new File(xxxx); Qual seria sua dúvida afinal de contas?
[code] import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.TreeSet; import java.io.FileWriter; import java.io.BufferedWriter; class arq{ public static void main (String[] args) { // aqui eu faço uma verificação pra ver se o txt existe File file = new File("texto.txt"); if (! file.exists()) { System.out.println ("não existe arquivo"); } else { // aqui eu jogo as linhas em uma list para ele poder pecorrer todas as linhas String [] linhare; List<String> listaLinhas = new ArrayList<String>(); Set<String> conjuntoPalavras = new TreeSet<String>(); BufferedReader br = null; try { // nesta parte ele abre o txt br = new BufferedReader (new FileReader ("texto.txt")); for (String linha = br.readLine(); linha != null; linha = br.readLine()) { listaLinhas.add (linha); String[] palavras = linha.split ("[^A-Za-z0-9_]+"); conjuntoPalavras.addAll (Arrays.asList (palavras)); /* caros amigos minha duvida é nessa parte eu quero passar uma palavra como parametro * ai ele altera a palavra do txt e depois salva mais nessa parte ele ta salvando um arquivo em branco * porque eu não sei como passar esta palavra por parametro ,este programa tem qui funcionar como o substituir do * bloco de notas essa é a minha idéia */ FileWriter lido = new FileWriter("novo.txt"); BufferedWriter escritor = new BufferedWriter(lido); } } // aqui verifica se tem alguma linha nula catch (IOException ex) { ex.printStackTrace(); } finally { if (br != null) try { br.close(); } catch (IOException ex) {} } System.out.println ("As palavras encontradas no arquivo são:"); System.out.println (conjuntoPalavras); System.out.printf ("O arquivo contém %d linhas%n", listaLinhas.size()); } } } [./code] (sem o .)
Responder

Gostei + 0

25/03/2010

André Luiz

[quote="DienerMaick"]Voc~e não deve fazer tudo isso no main. Cria outro método que faça isso, e chame ele apartir do main. se vc quer saber como apssar parametros pro método main é na hora da execução. por exemplo:
java processartexto palavra1 palavra2
isso faz com que no vetor args[] que o metodo main recebe como parametro venha preenchido com duas posições na posição 0 a palavra1 e na posição 1 a palavra2. espero ter ajudado
no código estou explicando o qui eu quero caro amigo , preciso de fazer um programa que funcione como o substiuir do bloco de notas . desde já agradeço :shock:
Responder

Gostei + 0

25/03/2010

André Luiz

[quote="DienerMaick"]Voc~e não deve fazer tudo isso no main. Cria outro método que faça isso, e chame ele apartir do main. se vc quer saber como apssar parametros pro método main é na hora da execução. por exemplo:
java processartexto palavra1 palavra2
isso faz com que no vetor args[] que o metodo main recebe como parametro venha preenchido com duas posições na posição 0 a palavra1 e na posição 1 a palavra2. espero ter ajudado
vc pode me ajuda caro amigo ,,,estou com esta duvida pois sou novo em java
Responder

Gostei + 0

25/03/2010

Diener Piske

Vou dar uma olhada mais tarde. Agora estou meio atarefado. mas pode deixar que vou quebrar a cabeça aqui também ok. Abraço.
Responder

Gostei + 0

25/03/2010

Carlos Heuberger

[quote="luiz_andre"][quote="Maveco"]Poderias colocar seu códigos entrre as tags [b][.code][./code] (sem o .)[/b] . . .
[code] import java.io.BufferedReader; import java.io.File; . . . } } [color=red][b][./code] (sem o .)[/b][/color]
[img]http://javafree.uol.com.br/forum/images/smiles/hauhau.gif[/img][img]http://javafree.uol.com.br/forum/images/smiles/hauhau.gif[/img][img]http://javafree.uol.com.br/forum/images/smiles/hauhau.gif[/img] espero que o "[./code]" seja piada, mas mesmo assim dá uma olhada em [url="http://javafree.uol.com.br/topic-870315-Tag-CODE-do-forum.html"][u]Tag CODE do fórum[/u][/url]
Responder

Gostei + 0

25/03/2010

Diener Piske

Amigo. Estou sem tempo de pesquisar. mas numa busca breve pela API java (http://java.sun.com/javase/6/docs/api/) achei a classe StringTokenizer(http://java.sun.com/javase/6/docs/api/java/util/StringTokenizer.html). Acho que esse o caminho para localizar. Como disse não pesquisei afundo. Espero que já de uma direção. amanhã tem mais. Abraço e boa noite.
Responder

Gostei + 0

25/03/2010

Diener Piske

Da uma olhada nesse código tambem. achei aqui numas classes velhas quando tava estudando.
public class Main{
public static java.lang.String replace( final java.lang.String template, final java.util.Map<java.lang.String,java.lang.String> map ){
final java.lang.StringBuilder list = new java.lang.StringBuilder( "\\$(" );
for( final java.lang.String key: map.keySet() ){
list.append( key ); list.append( "|" );
}
list.append( "[^\\s\\S])" );
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile( list.toString() );
java.util.regex.Matcher matcher = pattern.matcher( template );
final java.lang.StringBuffer stringBuffer = new java.lang.StringBuffer();
while( matcher.find() ){
final java.lang.String string = matcher.group( 1 );
matcher.appendReplacement( stringBuffer, map.get( string ));
}
matcher.appendTail( stringBuffer );
return stringBuffer.toString();
}

public static void main( final java.lang.String[] args ){
final java.util.Map<java.lang.String,java.lang.String> map = new java.util.HashMap<java.lang.String,java.lang.Strin g>();
map.put( "user", "Mary" );
map.put( "name", "Patricia" );
java.lang.System.out.println( replace( "Hello $user, my name is $name.", map ) ); 
}
}
Responder

Gostei + 0

25/03/2010

André Luiz

[quote="DienerMaick"]Da uma olhada nesse código tambem. achei aqui numas classes velhas quando tava estudando.
public class Main{
public static java.lang.String replace( final java.lang.String template, final java.util.Map<java.lang.String,java.lang.String> map ){
final java.lang.StringBuilder list = new java.lang.StringBuilder( "\\$(" );
for( final java.lang.String key: map.keySet() ){
list.append( key ); list.append( "|" );
}
list.append( "[^\\s\\S])" );
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile( list.toString() );
java.util.regex.Matcher matcher = pattern.matcher( template );
final java.lang.StringBuffer stringBuffer = new java.lang.StringBuffer();
while( matcher.find() ){
final java.lang.String string = matcher.group( 1 );
matcher.appendReplacement( stringBuffer, map.get( string ));
}
matcher.appendTail( stringBuffer );
return stringBuffer.toString();
}

public static void main( final java.lang.String[] args ){
final java.util.Map<java.lang.String,java.lang.String> map = new java.util.HashMap<java.lang.String,java.lang.Strin g>();
map.put( "user", "Mary" );
map.put( "name", "Patricia" );
java.lang.System.out.println( replace( "Hello $user, my name is $name.", map ) ); 
}
}
cara ainda estou meio perdido no programa mais aos poucos vou me achando eu ja consigui ler e salvar o arquivo agora quero alterar sera qui posso usar o replace se eu uso ele esta dando erro ...... como falar anteriormente o programa é igual ao substituir do bloco de notas é passado uma palavra como parametro e outra a ser trocada é isso amigo .... desde já agradeço a atenção ....

import java.io.BufferedReader;   
    import java.io.File;
	import java.io.FileReader;   
	import java.io.IOException;   
	import java.util.ArrayList;   
	import java.util.Arrays;   
	import java.util.List;   
	import java.util.Set;   
	import java.util.TreeSet;
	import java.io.FileWriter;
import java.io.BufferedWriter;
	  
	
	class arq{   
	    public static void main (String[] args) { 
	    	
	    	// aqui eu faço uma verificação pra ver se o txt existe 
	    	
	    	 String[] palavra3;
	    	
	    	File file = new File("teste1.sql");

	    	if (! file.exists()) {
	    		
	    		System.out.println ("não existe arquivo");
	    	
	    	}
	    	
	    	else {
	    		
	    		// aqui eu jogo as linhas em uma list para ele poder pecorrer todas as linhas 
	    	
	    
	    	
	    	
	        List<String> listaLinhas = new ArrayList<String>();   
	        Set<String> conjuntoPalavras = new TreeSet<String>();   
	        BufferedReader br = null;   
	        try {  
	        	
	        	// nesta parte ele abre o txt 
	        
	            br = new BufferedReader (new FileReader ("texto.txt"));   
	            for (String linha = br.readLine(); linha != null; linha = br.readLine()) {   
	                listaLinhas.add (linha);
	                
	                String[] palavras =linha.split ("[^A-Za-z0-9_]+");   
	                conjuntoPalavras.addAll (Arrays.asList (palavras));
	                
	              
	                
	                
	                 
	                }
	            
				
	            
	                FileWriter lido = new FileWriter("novo.txt"); 
	                String[] palavras1 = palavras.replace("XXBANCOXX","000");
	              
	 	           BufferedWriter escritor = new BufferedWriter(lido);
	 	        
	            }   
	         
	        
	        // aqui verifica se tem alguma linha nula 
	        catch (IOException ex) {   
	            ex.printStackTrace();   
	        } finally {   
	            if (br != null) try { br.close(); } catch (IOException ex) {}   
	        }   
	        System.out.println ("As palavras encontradas no arquivo são:");   
	        System.out.println (conjuntoPalavras);   
	        System.out.printf ("O arquivo contém %d linhas%n", listaLinhas.size());   
	    }   
	  
	} 
	    
	}


Responder

Gostei + 0

26/03/2010

Diener Piske

Funciona sim. é esse o código mesmo. da uma estudada que você consegue. ele substitui as palavras. falta só você fazer a rotina para ler cada linha do arquivo e grava-la novamente. como você disse que essa parte você está conseguindo fazer, então fica fácil. Qualquer dúvida manda ai. Abraço. Segue abaixo o Código atualizado.
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.HashMap;

public class Teste {
	public static String replace(final String template, final Map<String, String> map) {
		final StringBuilder list = new StringBuilder("(");
		for (final String key : map.keySet()) {
			list.append(key);
			list.append("|");
		}
		list.append("[^\\s\\S])");
		Pattern pattern = Pattern.compile(list.toString());
		Matcher matcher = pattern.matcher(template);
		final StringBuffer stringBuffer = new StringBuffer();
		while (matcher.find()) {
			final String string = matcher.group(1);
			matcher.appendReplacement(stringBuffer, map.get(string));
		}
		matcher.appendTail(stringBuffer);
		return stringBuffer.toString();
	}

	public static void main(final String[] args) {
		final Map<String, String> map = new HashMap<String, String>();
		map.put("user", "Mary");
		map.put("name", "Patricia");
		System.out.println(replace("Hello user, my name is name.", map));
	}
}
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar