Abrir arquivo em Java

36 respostas
I

Boa tarde, estou começando a programar agora e preciso da ajuda de vocês.
Preciso abrir um arquivo e contar o número de linhas desse arquivo.
O arquivo tem o formato text e eu estou utilizando o eclipse.

Por favor, me ajudem!
Obrigada

36 Respostas

FabricioPJ

http://lmgtfy.com.br/?q=java+abrir+arquivos+texto

I

E contar as linhas? Como que eu faço?

jrmelo

iisalynch,

Boa tarde.

Tire uma dúvida.

O arquivo já está criado? Ou você quer construir o arquivo, escrever, depois ler, e por fim contar as linhas escritas?

I

Ele já está criado, só preciso abrir ele pelo eclipse e contar as linhas!

ViniGodoy

Por favor, ao postar tópicos, não os marque com informações óbvias como [AJUDA], [DÚVIDA], [SOCORRO] ou [URGENTE].

Quanto ao seu problema, acho que o código abaixo resolve:

public int contarLinhas(File file) { try (Scanner in = new Scanner(file)) { int cont = 0; while (in.hasNextLines()) { in.nextLine(); cont++; } } catch (Exception e) { throw new RuntimeException("Problemas ao ler arquivo.", e); } return cont; }

I

ViniGodoy, uma duvida eu vou ter que fazer essa contagem em vários arquivos, esse codigo servira para todos?

ViniGodoy

Sim.

I

Ok, muito obrigada pela ajuda.

I

Pessoal, coloquei o cógido que o ViniGodoy passou e apresentou alguns erros, se vocês puderem me ajudar.

public int contarLinhas(File file){
	try (Scanner in = new Scanner(file); {  ----> AQUI O ERRO EH O SEGUINTE: SYNTAX ERROR ON TOKEN "(", { EXPECTED
		int cont = 0;
		while (in.hasNextLine()) {
			in.nextLine();
			cont++;	
		}
	} catch (Exception e) { ----> AQUI O ERRO EH O SEGUINTO: SYNTAX ERROR, INSERT "}" TO COMPLETE BLOCK / LINE BREAKPOINT:ABRIRARQUIVO [LINE:24] CONTAR LINHAS (FILE)
		throw new RuntimeException("Problemas ao ler arquivo." ,e);
	}
	
	return cont;

}

Bruno.Souza.PW

substitua

try (Scanner in = new Scanner(file); {

por

try (Scanner in = new Scanner(file)) {
I

Bruno.Souza.PW:

substitua

try (Scanner in = new Scanner(file); {

por

try (Scanner in = new Scanner(file)) {

continua errado, mas obrigada pela ajuda.

ErickRAR

try { (Scanner in = new Scanner(file)) ...

Bruno.Souza.PW

tente assim…

public int contarLinhas(File file) {
        int cont = 0;
        try {
        	Scanner in = new Scanner(file);
                while (in.hasNextLine()) {
                        in.nextLine();
                        cont++;
                }
        } catch (Exception e) {
            throw new RuntimeException("Problemas ao ler arquivo.", e);
        }
        return cont;
    }
jrmelo

O código acima funciona.

Observação: O mais importante é entender o que está acontecendo.

Dica: Leia a API utilizada.

Jonas

I

Seguinte, vou colar tudo o que fiz até agora. Ficou quase tudo certo…

import java.io.File;
import java.until.Scanner;

public class AbrirArquivo {

public void main(String args[]){
	File arquivo = new File("/Users/crnobrega/Documents/JAVA/t.tailtarget.com.log-2012-07-07.a");
	
	int qtd = contarLinhas(arquivo);
	
	System.out.println(qtd);
}

public int contarLinhas(File file) {  
	int cont = 0;  
    try {  
        Scanner in = new Scanner(file);  
            while (in.hasNextLine()) {  
                    in.nextLine();  
                    cont++;  
            }  
    } catch (Exception e) {  
        throw new RuntimeException("Problemas ao ler arquivo.", e);  
    }  
    
    return cont;  
}

}

No código - import java.until.Scanner; aparece o X do lado e quando eu clico aparece o seguinte:

  • create class “Scanner” in package ‘java until’
  • create interface “Scanner” in package ‘java until’
  • create annotation “Scanner” in package ‘java until’
  • create enum “Scanner” in package ‘java until’
  • remove unused import
  • organize imports
  • fix project setup

No código - Scanner in = new Scanner(file); aparece o X do lado e quando eu clico aparece o seguinte:

  • create class “Scanner”;
  • change to “Signer” (java. security);
  • change to ‘java.until.scanner’ (java until)
jrmelo

No código - import java.until.Scanner; aparece o X do lado e quando eu clico aparece o seguinte:

  • create class “Scanner” in package ‘java until’
  • create interface “Scanner” in package ‘java until’
  • create annotation “Scanner” in package ‘java until’
  • create enum “Scanner” in package ‘java until’
  • remove unused import
  • organize imports
  • fix project setup

A classe Scanner pertence ao pacote java.util.*; Então, por favor, acerte o seu import para import java.util.Scanner;

Se estiver usando o Eclipse, posicione o cursor sobre a classe e pressione Ctrl+1, abrirá umas opções cujo a primeira linha contém o nome do pacote da classe, basta selecionar sobre e pressionar enter.

ViniGodoy

Troque a linha:

import java.until.Scanner;

Por:

import java.util.Scanner;

Além disso, que versão de Java você está utilizando?
Se for a 7, o código que postei funciona.
Se não inferior a versão 7, então aquele try deveria ser declarado de forma diferente:

public int contarLinhas(File file) { Scanner in = null; try { in = new Scanner(file); int cont = 0; while (in.hasNextLines()) { in.nextLine(); cont++; } } catch (Exception e) { throw new RuntimeException("Problemas ao ler arquivo.", e); } finally { if (in != null) { try { in.close(); } catch (IOException e) {} } } return cont; }

I

Pessoal muito obrigada pela ajuda.
Troquei os codigos como o ViniGodoy disse, ficou aparentemente tudo certo, não apareceu nenhum “x”
Mas o programa não roda, já olhei tudo e nada. ):

jrmelo

Roda esse código para testar:

Eu chamei a minha classe que contém o método que retorna a quantidade de linhas do arquivo de ContaLinhaArquivo{}.

/**
 * @author Jonas
 * Objetivo: Testar a classe ContaLinhaArquivo
 */
package br.com.house.test;

import java.io.File;

import br.com.house.crud.ContaLinhaArquivo;

public class TestaContarArquivo {
	
	public static void main(String []args){		
			File file = new File("c:\\temporarios\\arquivo.txt");
			ContaLinhaArquivo cla = new ContaLinhaArquivo();
			int i = cla.contarLinhas(file);
		
			System.out.println("Quantidade de linhas = " + i);
	}
}
I

Abri um novo projeto e coloquei esse código, apareceu um monte de erros e desisti haha…
Não sei porque o meu projeto não roda, já tentei de tudo, já pedi ajuda em outros lugares e nada.

jrmelo

O código que te passei roda sem qualquer tipo de problema.

Posta o erro.

I

jrmelo:
O código que te passei roda sem qualquer tipo de problema.

Posta o erro.

Ele não apresenta erros, mas quando eu vou em Run > Run As aparece None Applicable.

I

jrmelo:
O código que te passei roda sem qualquer tipo de problema.

Posta o erro.

Desculpa fiz confusão, no que você me passou todas as linhas ficam o “x” vermelho do lado.
Já o meu codigo não apresenta nenhum tipo de erro, mas quando eu vou tentar rodar fala None Applicable.

I

jrmelo:
O código que te passei roda sem qualquer tipo de problema.

Posta o erro.

Copiei o seu código em baixo de tudo o que eu fiz, ai quando eu vou em run as aparece “java aplication” quando eu clico ele dá uma mensagem de erro “selection does not contain a main type.”

jrmelo

Esse tipo de problema já foi discutido aqui no fórum, veja: http://www.guj.com.br/java/193589-erro-selection-does-not-contain-main-type/2

I

Meu “programinha” tá começando a ficar um pouco melhor… Mas ainda preciso fazer algumas coisas, se vocês puderem me ajudar:

public static int contarLinhas(File arquivo) {

int cont = 0;
	cont++;
	cont++;
	cont++;

	// abrir o arquivo
	
	// loop enquanto arq existe
//		while (in.has.NextLine()) {

//			in.NextLine();

//			cont++;

//		}
return cont;
}

}

tirei o “catch” porque a pessoa que está me dando umas dicas disse que ainda não preciso usar isso…

adriano_si

iisalynch:
Meu “programinha” tá começando a ficar um pouco melhor… Mas ainda preciso fazer algumas coisas, se vocês puderem me ajudar:

public static int contarLinhas(File arquivo) {

int cont = 0;
	cont++;
	cont++;
	cont++;

	// abrir o arquivo
	
	// loop enquanto arq existe
//		while (in.has.NextLine()) {

//			in.NextLine();

//			cont++;

//		}
return cont;
}

}

tirei o “catch” porque a pessoa que está me dando umas dicas disse que ainda não preciso usar isso…

A pessoa está lhe dando dicas erradas… Tentar executar qualquer operação de IO em Java sem usar o Try/Catch é um risco… Até onde me lembro, acho que nem consegues abrir um arquivo sem o tratamento de IOException adequado.

Não sei como está agora no Java 7, mas o código que lhe passaram aqui está correto do início ao fim. Provavelmente está acontecendo algum problema de execução com versão de JVM ou até mesmo Eclipse utilizado… Enfim…

Volte um pouco os testes e tente rodar um Hello World na sua IDE e nos diga o que aconteceu… Depois coloque a mensagem do Hello World dentro de um JOptionPane, enfim…

O código passado está correto, seu ambiente pode ter algum furo… Qual a versão da JVM vc está usando para os testes ?

Abs []

I


A pessoa está lhe dando dicas erradas… Tentar executar qualquer operação de IO em Java sem usar o Try/Catch é um risco… Até onde me lembro, acho que nem consegues abrir um arquivo sem o tratamento de IOException adequado.

Não sei como está agora no Java 7, mas o código que lhe passaram aqui está correto do início ao fim. Provavelmente está acontecendo algum problema de execução com versão de JVM ou até mesmo Eclipse utilizado… Enfim…

Volte um pouco os testes e tente rodar um Hello World na sua IDE e nos diga o que aconteceu… Depois coloque a mensagem do Hello World dentro de um JOptionPane, enfim…

O código passado está correto, seu ambiente pode ter algum furo… Qual a versão da JVM vc está usando para os testes ?

Abs []

Eu estou utilizando somente o try, e tenho certeza que a pessoa não está falando coisa errada.
Enfim, não estou dizendo que os codigos estão errados, eu sei que não estão.
Mas eu preciso de um codigo para abrir o arquivo e um loop enquanto o arquivo existir…

I

[quote=iisalynch]


A pessoa está lhe dando dicas erradas… Tentar executar qualquer operação de IO em Java sem usar o Try/Catch é um risco… Até onde me lembro, acho que nem consegues abrir um arquivo sem o tratamento de IOException adequado.

Não sei como está agora no Java 7, mas o código que lhe passaram aqui está correto do início ao fim. Provavelmente está acontecendo algum problema de execução com versão de JVM ou até mesmo Eclipse utilizado… Enfim…

Volte um pouco os testes e tente rodar um Hello World na sua IDE e nos diga o que aconteceu… Depois coloque a mensagem do Hello World dentro de um JOptionPane, enfim…

O código passado está correto, seu ambiente pode ter algum furo… Qual a versão da JVM vc está usando para os testes ?

Abs []

Sobre o hello world, ele funciona.

adriano_si

iisalynch:

Eu estou utilizando somente o try, e tenho certeza que a pessoa não está falando coisa errada.

Cara, não sei mesmo como conseguiram essa mágica, pois o compilador (minha certeza é com Java < 7, não sei depois da versão 7) simplesmente não compila código sem o catch(). Aliás, sem cathch() pra que Try ???

Alguém sabe me dizer se isso é possível no Java 7 ???

iisalynch:

Mas eu preciso de um codigo para abrir o arquivo e um loop enquanto o arquivo existir…

E isso você já tem, o Viny te deu o método já pronto que conta as linhas… Segue anexo pra verificares…


adriano_si

Bom, pelo o que ví aqui:http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

É possível…

Me pareceu que o Try funcionará igual à um IF só entrando no código se a condição for verdadeira… Confere ???

Bem legal a feature, que ainda nos permite omitir o finally {} quando precisarmos fechar recursos… Excelente…

Abs []

I

adriano_si:
Bom, pelo o que ví aqui:http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

É possível…

Me pareceu que o Try funcionará igual à um IF só entrando no código se a condição for verdadeira… Confere ???

Bem legal a feature, que ainda nos permite omitir o finally {} quando precisarmos fechar recursos… Excelente…

Abs []

Confere!
Eu achei um código pra abrir o arquivo em outro site:

try {

File file = new File("/Users/crnobrega/Documents/JAVA/t.tailtarget.com.log-2012-07-07.a");

BufferedReader in;

String str;

while ((str = in.readLine()) != null) {

int cont = 0;

cont++;

cont++;

cont++;

in.close();

Vai funcionar ou está errado?

adriano_si

Porque não usar o que já foi postado aqui ???

Não testei o código, mas sim, o BufferedReader é feito pra leitura de IO, só que acho que tem que passar o FileReader pra ele se não me engano…

Qual o problema em usar o que foi postado e já está funcionando com uma classe Scanner lendo o arquivo e somando a variável count ???

Qualquer dúvida veja a doc: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#Scanner(java.io.File)

Abs[]

I

adriano_si:
Porque não usar o que já foi postado aqui ???

Não testei o código, mas sim, o BufferedReader é feito pra leitura de IO, só que acho que tem que passar o FileReader pra ele se não me engano…

Qual o problema em usar o que foi postado e já está funcionando com uma classe Scanner lendo o arquivo e somando a variável count ???

Qualquer dúvida veja a doc: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#Scanner(java.io.File)

Abs[]

Não tem problema, na verdade eu procurei enquanto não tinha resposta…
Mas o código que foi postado quando eu tiro o catch ele fica com varios erros…
Mas enfim, vou colocar ele sim…

I

Só uma duvida adriano_si, esse código postado vai abrir o arquivo?

adriano_si

Cara, não vejo uma forma do Scanner ir para a próxima linha, se internamente ele não abrir o File.

Pelo que você pediu, funciona numa boa.

Consegues ler o conteúdo do arquivo, o método nextLine do Scanner já faz isso pra você, veja a leve mudança no código:

public int contarLinhas(File file) {  
	   Scanner in = null;  
	   int cont = 0;
	   try {  
	      in = new Scanner(file);    
	      while (in.hasNextLine()) {
	    	  System.out.println(in.nextLine());
	          cont++;  
	      }  
	   } catch (Exception e) {  
	     throw new RuntimeException("Problemas ao ler arquivo.", e);  
	   } finally {  
	      if (in != null) {
	    	  in.close();
	      }  
	   }  
	   return cont;  
	}

Escrever eu já não sei, acho que só usando um FileOutputStream se bem me lembro…

Abs []

Criado 27 de julho de 2012
Ultima resposta 2 de ago. de 2012
Respostas 36
Participantes 7