Duvida básica sobre, IO. [RESOLVIDO]

12 respostas
evertonsilvagomesjav

Boa noite galera, estou lendo o livro da Kathy e cheguei na parte de IO e me gerou uma seguinte dúvida, vou colocando como comentário:

File file;
FileReader fileReader;
BufferedReader bufferedReader;
String linha = "";
String retorno = "";

try{

file = new File("arquivoteste.txt"); // aki ok, esta criando um nome pro arquivo.

file.newCreateFile(); // aki ok também, esta criando um arquivo propriamente dito.

fileReader = new FileReader(file); // aqui, esta abrindo o arquivo?

bufferedReader = new BufferedReader(fileReader); // aqui esta lendo o arquivo, ou abrindo o arquivo?

while((linha = bufferedReader.readLine()) != null){ // aqui  todas linhas do arquivo, e atribui á variavel linha.

retorno += linha +"\n"; // concatena as linhas.

}catch(IOException e){

e.printStackTrace();

}

12 Respostas

kaique
Linha 09: criando o arquivo em memória;

Linha 11: criando o arquivo em disco;

Linha 13: Criando um objeto que te permite ler os caracteres do arquivo;

Linha 15: Criando um novo objeto que te permite ler os caracteres de um arquivo, porém de uma maneira mais sofisticada (lendo linhas, por exemplo).

Linha 17:  o conteúdo do arquivo, linha por linha;

Linha 19: a cada linha lida do arquivo, concatena o valor em uma variável;

[]'s.

B

Hum... vou comentar direitinho o programa, e acrescentar algo que é indispensável.

File file;
FileReader fileReader;
BufferedReader bufferedReader = null;
String linha = "";
String retorno = "";

try{

file = new File("arquivoteste.txt"); // Um objeto File representa um nome de arquivo e/ou diretório. 

file.newCreateFile(); // Cria-se um arquivo vazio com o nome dado.

fileReader = new FileReader(file); // Abre-se o arquivo

bufferedReader = new BufferedReader(fileReader); // Encapsulando o objeto FileReader em um objeto BufferedReader, para podermos usar o método readLine (que não está disponível em FileReader)

while((linha = bufferedReader.readLine()) != null){ // Lendo uma linha de cada vez, e saindo se a variável "linha" for null

retorno += linha +"\n"; // Concatenando as linhas

}catch(IOException e){

e.printStackTrace();

}finally {
    // Nunca se esqueça de fechar um arquivo. Abriu um arquivo, feche-o o mais depressa possível. 
    try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException ex) {} // Fechando o arquivo.
}
evertonsilvagomesjav

Hum mas teria como, eu ler o arquivo somente com FileReader? Por exemplo ao invés de usar esse trecho de codigo, com BufferReader, usar somente FileReader, como seria?

br = new BufferedReader(fr);
			
while((linha = br.readLine()) != null){
				
result += linha +"\n";
}
evertonsilvagomesjav

alguem ajuda eu?

kaique

Teria sim, mas seria de uma maneira menos eficiente, pois você precisaria ler caractere por caractere.
Uma dica: se acostuma a verificar na documentação do Java as classes e métodos existentes. Assim, a grande maioria das suas dúvidas você mesmo descobrirá a resposta.

[]'s.

evertonsilvagomesjav

eu até cheguei a ler Kaique só que eu me embaralhei um pouco, tentei usar o metodo que usa umarray de char mas nao tive sucesso, por isso pedi ajuda.

kaique

Qual foi o erro que gerou pra vc?

[]'s.

evertonsilvagomesjav

nao gerou erro eu nao consigo e prosseguir, por exemplo eu chamei o método read de FileReader e passei um arrayChar, só que nao sei se esse arrayChar que eu passei que vai receber os caracteres do arquivo, fiz até aqui:

char[] arrayChar = new char[50];
		
try{
									
fr = new FileReader(this.file);
			
fr.read(arrayChar);
ViniGodoy

Só ressaltando. A linha 09 não cria arquivo nenhum em memória. Ela só cria um objeto que representa o endereço de um arquivo no disco. Com base nesse endereço, pode-se testar se o arquivo mesmo existe, cria-lo no disco, etc. Agora, essa variável pouco tem a ver com o arquivo em si.

Um arquivo em memória é representado pela classe RandomAccessFile ou pela classe FileChannel.

kaique

Cara, não tem mistério. Caso você passar um array de char para o método read, a classe FileReader irá copiar todos os caracteres possíveis para dentro do array.
O que acontece quando você executa esse trecho de código que passou??

[]'s.

ViniGodoy

Como já te falaram, acostume-se a ler a documentação:

"javadoc":
Returns: The number of characters read, or -1 if the end of the stream has been reached

logo:

int bytes = 0;

while (bytes != -1) {
   bytes = fr.read(arrayChar);
   if (bytes > 0) {
       processa(Arrays.copyOf(arrayChar, 0, bytes));
   }
}
evertonsilvagomesjav

obrigado a todos.

Criado 2 de dezembro de 2009
Ultima resposta 4 de dez. de 2009
Respostas 12
Participantes 4