ler arquivo , alterar e gravar
: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
Curtidas 0
Respostas
André Silva
24/03/2010
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?
GOSTEI 0
Diener Piske
24/03/2010
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:
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
java processartexto palavra1 palavra2
GOSTEI 0
André Luiz
24/03/2010
[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 .)
GOSTEI 0
André Luiz
24/03/2010
[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:
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:
java processartexto palavra1 palavra2
GOSTEI 0
André Luiz
24/03/2010
[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:
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
java processartexto palavra1 palavra2
GOSTEI 0
Diener Piske
24/03/2010
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.
GOSTEI 0
Carlos Heuberger
24/03/2010
[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]
GOSTEI 0
Diener Piske
24/03/2010
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.
GOSTEI 0
Diener Piske
24/03/2010
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 ) );
}
}
GOSTEI 0
André Luiz
24/03/2010
[quote="DienerMaick"]Da uma olhada nesse código tambem.
achei aqui numas classes velhas quando tava estudando.
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 ....
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 ) );
}
}
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());
}
}
}
GOSTEI 0
Diener Piske
24/03/2010
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));
}
}
GOSTEI 0