Arquivos: Fluxos

Olá,
Nao estou entendendo este programa.Pesquisei em apostilas,artigos mas nao enconterei nada referente a isso.
Porque o programa compila e imprimi “28”???
Outra coisa que eu nao entendi é esse “atfd”. Alguem poderia por favor me explicar?

 
import java.io.*
 
 public class RandFile {
   
  public static void main(String[ ] atfd) trows IOException {
 
     FileOutputStream fos =new FileOutputStream("file") ;
 
               for ( int i = 500 ; i<600 ; i++)  {
                     fos.write(i) ;
 
               }
               fos.close() ;
 
    RandomAcessFile raf =new RandowAcessFile("file", "r") ;
               
                raf.seek (40);
 
                System.out.println (raf.read() ) ;
   
                raf.close();
         }
 } 
 

Ola,

Bom, vamos por partes… o “atfd” são os argumentos da linha de comando… geralmente as pessoas colocam o nome desta variável de “arg” ou “args”, mas não precisa necessáriamente ser estes… quem fez o programa que vc postou queria mudar um pouco… sem problemas…

Em relação a ele imprimir “28” é simples, o método read() da classe RandomAcessFile lê um byte e retorna um inteiro informando o proximo byte ou -1 caso seja o final do arquivo, e logo se imprime na saida padrão… na linha:

System.out.println (raf.read() ) ; 

Entendeu???

Mais ou menos. O arquivo que ele esta lendo vai ser os numeros de 500 ate 600. É isso mesmo?
Tem como voce explicar dando algum exemplo?

[quote=“AlunoJava”]Mais ou menos. O arquivo que ele esta lendo vai ser os numeros de 500 ate 600. É isso mesmo?
Tem como voce explicar dando algum exemplo?[/quote]
Não, ele vai escrever os números que correspondem ao byte 500, 501…, 599, 600.
Faça assim que vai ver o que ele está escrevendo em “outro idioma”:

[code]import java.io.*;

public class RandFile {

public static void main(String[ ] atfd) throws IOException 
{
		FileOutputStream fos =new FileOutputStream("file") ;

		for ( int i = 500 ; i<600 ; i++)  {
				fos.write(i) ;
				System.out.println(Byte.toString( (new Integer(i)).byteValue() ));

		}
		fos.close() ;

		RandomAccessFile raf =new RandomAccessFile("file", "r") ;
		raf.seek (40);
		System.out.println (raf.read() ) ;
		raf.close();
}

} [/code]

E o raf.seek (40); vai ser o 40° item escrito no arquivo.

Deixa ver se eu entendi victor.
Mas entao o quadragesimo(40º) item escrito vai ser “540”???
Porque o programa imprimi “28”?? Da onde saiu esse 28?

Ele não está escrevendo a sequencia de inteiros 500, 501…, 599, 600.
Ele está escrevendo o Byte 500, Byte 501, Byte 502…, Byte 600.
Por sinal, o Byte 540 vai significar 28. Tente colocar o print que eu colei no post anterior, que ele vai transformar os Bytes em numeros pra você entender.

Obrigado!!! Vou testar sim, é que estou trabalhando por isso eu nao testei ainda.

Este programa é um exercicio escrito de um concurso militar, seria possivel resolver ele só analisando o programa? Tinha a opcao de resposta que o programa imprimi “C) 540” e a opcao que o programa imprimi “D) 28”.

byte vai de -128 a 127, certo?
540 cabe aí? Não.
Depois que passa do 127 volta no -128 e vai somando…
Da primeira vez que chega no 0 temos 256, na segunda 512.
Para chegar no 540…

Bingo! 28.

Legal!!!Entendi!!! :grin:
Obrigado pela grande dica JavaDrops, ficou mais claro ainda.
Obrigado a todos pela valiosa ajuda, ao victor e ao bruno.