Lendo e Manipulando Arquivo Txt

6 respostas
B

Prezados Bom dia,

Gostaria da ajuda dos senhores para conseguir resolver esta aplicação. É o seguinte eu tem que desenvolver uma aplicação Java que pegue um arquivo txt leia e verifique a sequencia se está correta. Mostro em código como terá que ser feito essa ação. O Código para ler o arquivo eu já implementei, o que está faltando é verificar a sequência. Segue abaixo o Código e depois parte do conteúdo do arquivo, para que os senshores possam entender a sequencia.

Código:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class LendoArq {
 
    public static void main(String[] args) throws IOException {
    
        //Classe que ler um arquivo, a partir do caminho informado pelo usuário
        BufferedReader in;   
        in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Digite o caminho do arquivo que você quer ler");
        String a = in.readLine();
        try{
            FileInputStream is = new FileInputStream(a);
            InputStreamReader reader = new InputStreamReader(is);
            BufferedReader buffer = new BufferedReader(reader);
            
            //Verifica se o arquivo não está vazio
           while(true){   
                /* O Atributo Linha do Tipo String, é testado no arquivo, ou seja, se no 
                 arquivo não estiver nada o programa é abortado e imprime a mensagem */
                
                String linha = buffer.readLine();
                if(linha==null){
                System.out.println("O Arquivo Está Vazio");    
                    break;
                }
                System.out.println(linha);
            }
            is.close();
        } catch(IOException ex){
            System.out.println(ex.getMessage());
            
        }

Sequência:

[SampleStarted]
DateTimeStamp=20/08/2007,06:24:13
ArticleKey=[telefone removido]
Job=0842659, 1
UserName=004600
SampleRequestedPieces=1

[Counter]
DateTimeStamp=20/08/2007,06:24:13
Wire=WK0075BRVD, 63855742, 63169427
Terminal=[telefone removido], 160131, 155389
Terminal=[telefone removido], 712751, 698894
Seal=[telefone removido], 156965, 152301
Seal=[telefone removido], 691420, 677561

[SampleTerminated]
DateTimeStamp=20/08/2007,06:24:23
ArticleKey=[telefone removido]
Job=0842659, 1
UserName=004600
SampleRequestedPieces=1

[Counter]
DateTimeStamp=20/08/2007,06:24:23
Wire=WK0075BRVD, 63856062, 63169427
Terminal=[telefone removido], 160132, 155389
Terminal=[telefone removido], 712752, 698894
Seal=[telefone removido], 156966, 152301
Seal=[telefone removido], 691421, 677561

[SampleStarted]
DateTimeStamp=20/08/2007,06:25:57
ArticleKey=[telefone removido]
Job=0842659, 1
UserName=004600
SampleRequestedPieces=1

[Counter]
DateTimeStamp=20/08/2007,06:25:57
Wire=WK0075BRVD, 63856062, 63169427
Terminal=[telefone removido], 160132, 155389
Terminal=[telefone removido], 712752, 698894
Seal=[telefone removido], 156966, 152301
Seal=[telefone removido], 691421, 677561

[SampleTerminated]
DateTimeStamp=20/08/2007,06:26:07
ArticleKey=[telefone removido]
Job=0842659, 1
UserName=004600
SampleRequestedPieces=1

Então eu tenho que fazer uma condição dentro do meu código que verifique essa Sequência: ([SampleStarted] && [Counter] && [SampleTerminated]). Como faço isso? Aguardo respostas.

6 Respostas

Pedrosa

Use o método contains para cada linha encontrada, e cuidado com esse wile(true);
prefira algo assim:

BufferedReader leitor = new BufferedReader(reader);
String valor = null;
while((valor = leitor.readLine())!=null){
   if(valor.contains("DateTimeStamp=20/08/2007,06:24:13 ")){
       ..vai montando sua lógica
   }
}

Para casos mais complexos use Expressão Regular.

peron

Olá,

Essa estrutura de arquivo texto é o famoso INI.

Para java, em uma breve busca encontrei essa API aqui:

http://ini4j.sourceforge.net

Peguei um exemplo lá:

public class IniSample
{
    public static void main(String[] args) throws Exception
    {
        String filename = args.length > 0 ? args[0] : "dwarfs.ini";
        Ini ini = new Ini(new FileReader(filename));

        for(String key : ini.get("sleepy").keySet())
        {
            System.out.println("sleepy/" + key + " = " + ini.get("sleepy").fetch(key));
        }
        
    }
}

sds

B

Prezados,

Eu tenho que verificar esses cabeçalhos, na sequência ([SampleStarted] && [Counter] && [SampleTerminated] )
, pois se a sequência não for essa, o arquivo está Mal formado. Como posso fazer isso.

B

Estive lendo alguns materiais e vi que posso resolver com Expressões Regulares, alguèm poderia postaralguma exemplo que utilize-as. Fico no aguardo.

Pedrosa

Vamos supor que você precisa identificar o número de um cartão no meio de uma linha qualquer, no formato 00.00.00000000-0:

public static void main(String[] args) {
		String valor = "aaaaxxxxx000000 *** 12.34.12345678-10 **&&aaa0000aaaaaaa";
		Pattern patternUserCard = Pattern.compile("([0-9]{1,2}\\.[0-9]{1,2}\\.[0-9]{1,8}-[0-9]{1})");
		Matcher matcherUserCard = patternUserCard.matcher(valor);
		while(matcherUserCard.find()){
			System.out.println(valor.substring(matcherUserCard.start(), matcherUserCard.end()));
		}
}

Esse material é execelente:
http://guia-er.sourceforge.net/

B

Pessoal tentei fazer mais não obtive resultados. Alguém poderia me falar como proceder, para que possa resolver esse problema?

Tenho um arquivo TXT e nele eu tenho que procurar uma sequência, para saber se o arquivo foi mal formado ou não. Já estou lendo todo o arquivo, só não estpu conseguindo fazer essa verificação, para saber se está tudo bem com o arquivo, para isso tenho que verificar a sequência.

Sequência a ser verificada: [SampleStarted] && [Counter] && [SampleTerminated]

Parte do Arquivo TXT

[SampleStarted]
DateTimeStamp=20/08/2007,06:24:13
ArticleKey=[telefone removido]
Job=0842659, 1
UserName=004600
SampleRequestedPieces=1

[Counter]
DateTimeStamp=20/08/2007,06:24:13
Wire=WK0075BRVD, 63855742, 63169427
Terminal=[telefone removido], 160131, 155389
Terminal=[telefone removido], 712751, 698894
Seal=[telefone removido], 156965, 152301
Seal=[telefone removido], 691420, 677561

[SampleTerminated]
DateTimeStamp=20/08/2007,06:24:23
ArticleKey=[telefone removido]
Job=0842659, 1
UserName=004600
SampleRequestedPieces=1

O arquivo terá que ter essa sequência sempre. Então como eu faço para verificar essa sequência no Arquivo TXT.

Criado 24 de agosto de 2007
Ultima resposta 28 de ago. de 2007
Respostas 6
Participantes 3