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?
[code]
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();
}
}[/code]
Geralmente se usa args, ou seja seu metodo main pode receber parametros na linha de comando.
[quote=AlunoJava]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?
[code]
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();
}
}[/code][/quote]
Bom…quanto ao código em geral, não entendi muito bem…teria que olhar o JavaDoc para ver o que faz o RandomAcessFile, apesar de ser um pouco intuitivo sua função…
Quanto ao argumento do método main, é como o args!só mudamos o nome no caso! é o nome do array de string que você passa como parametro para o metodo main!
e no caso na hora de executando, você pode após o nome da classe que você está executando colocar um conjunto de strings, criando assim um array com o nome que você especificar, no seu exemplo o nome é atfd!!
entendeu?
Entendi. Mas gostaria de saber porque programa imprimi " 28"?
Da onde está vindo esse “28”?
Esse é o tipo de programa que você deve rodar e usar uma ferramenta que lê arquivos binários.
Eu rodei o tal programa e peguei o arquivo gerado. (Obviamente, como você copiou de um livro, havia um monte de erros de cópia, então os corrigi).
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) ;
}
fos.close() ;
RandomAccessFile raf = new RandomAccessFile("file", "r") ;
raf.seek (40);
System.out.println (raf.read() ) ;
raf.close();
}
}
O arquivo gerado ficou assim (dump hexadecimal):
0000 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 ⌠⌡÷≈°..√ⁿ²■.....
0010 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 ................
0020 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 ............ !"#
0030 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 $%&'()*+,-./0123
0040 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 456789:;<=>?@ABC
0050 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 DEFGHIJKLMNOPQRS
0060 54 55 56 57 TUVW
Na posição 40 (28 en hexadecimal) o byte lido é 1C (28 em decimal), conforme você pode ver do "dump".
[quote=thingol]Esse é o tipo de programa que você deve rodar e usar uma ferramenta que lê arquivos binários.
Eu rodei o tal programa e peguei o arquivo gerado. (Obviamente, como você copiou de um livro, havia um monte de erros de cópia, então os corrigi).
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) ;
}
fos.close() ;
RandomAccessFile raf = new RandomAccessFile("file", "r") ;
raf.seek (40);
System.out.println (raf.read() ) ;
raf.close();
}
}
O arquivo gerado ficou assim (dump hexadecimal):
0000 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 ⌠⌡÷≈°..√ⁿ²■.....
0010 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 ................
0020 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 ............ !"#
0030 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 $%&'()*+,-./0123
0040 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 456789:;<=>?@ABC
0050 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 DEFGHIJKLMNOPQRS
0060 54 55 56 57 TUVW
Na posição 40 (28 en hexadecimal) o byte lido é 1C (28 em decimal), conforme você pode ver do "dump".
[/quote]
MAS daonde aparece esse binário??
Poderia explicar mais detalhadamente esse programa?
agradeço!
Olá,
Esse programa eu nao peguei de um livro.Foi uma questao de um concurso militar. No gabarito a resposta é “28”.
O arquivo que aparece em binario sao os valores de 500 a 599?
Voce poderia por favor explicar em detalhes essa programa? Reforçando o pedido do akumaldo.
Se der uma olhada, o segredo é “fos.write”.
Na documentação de FileOutputStream, ela diz:
write
public void write(int b)
throws IOException
Writes the specified byte to this file output stream. Implements the write method of OutputStream.
O que é mais chato é que o parâmetro é um inteiro (por exemplo, 500) mas o que é escrito é um byte.
Como você deve saber (já que está estudando para o tal concurso), a maneira mais simples de converter algo para um byte (manualmente) é converter o valor 500 para hexadecimal - isso dá 0x01F4 - e pegar apenas os dois últimos algarismos hexadecimais - isso dá F4.
E é por isso que aparece o tal do F4 no arquivo binário gerado.
Para saber de onde aparece o tal valor 28:
- Quando você posiciona para ler o byte da posição 40, está na verdade lendo o que foi escrito com fos.write (540).
- Ora, 540 em hexadecimal é 21C.
- Convertendo isso para byte dá 1C.
- Ou seja, 28 em decimal.
Obrigado thingol !!! agora eu entendi!!
