Vídeo: Java #12 - Escrita e Leitura de arquivos de texto 2024
Muitos programas Java lêem caracteres do teclado do computador. Esses programas usam coisas como Scanner, System. in, e nextDouble - coisas definidas na API de Java. O programa DoPayroll nesta lista coloca uma nova rotação nesta história. Em vez de ler caracteres do teclado, o programa lê caracteres do EmployeeInfo. arquivo txt. O arquivo vive no disco rígido do seu computador.
importar java. util. Scanner; importar java. io. Arquivo; importar java. io. IOException; classe pública DoPayroll {public static void main (String args []) lança IOException {Scanner diskScanner = new Scanner (novo arquivo ("EmployeeInfo. txt")); para (int empNum = 1; empNum <= 3; empNum ++) {payOneEmployee (diskScanner);} diskScanner. close ();} static void payOneEmployee (Scanner aScanner) {Employee anEmployee = new Employee (); Um empregado. setName (aScanner. nextLine ()); Um empregado. setJobTitle (aScanner. nextLine ()); Um empregado. cutCheck (aScanner. nextDouble ()); aScanner. nextLine ();}}
Para ler caracteres de um arquivo, você usa algumas das mesmas coisas que o ajudam a ler caracteres do teclado. Você usa o Scanner, nextDouble e outros brindes. Mas, além desses brindes, você tem alguns obstáculos extras para saltar. Aqui está uma lista:
-
Você precisa de um novo arquivo objeto. Para ser mais preciso, você precisa de uma nova instância da classe File da API. Você obtém esta nova instância com um código como
novo Arquivo ("EmployeeInfo. Txt")
O material entre aspas é o nome de um arquivo - um arquivo no disco rígido do seu computador. O arquivo contém caracteres.
Neste ponto, a terminologia faz as montanhas sair de molehills. Certo, as frases do novo objeto e da nova instância do arquivo aparecem , , mas tudo o que você está fazendo é criar um novo arquivo ("EmployeeInfo. Txt") para um arquivo em seu disco rígido. Depois de empurrar o novo Arquivo ("EmployeeInfo. Txt") para o novo Scanner,
Scanner diskScanner = novo Scanner (novo arquivo ("EmployeeInfo. Txt"));
você pode esquecer tudo sobre o novo negócio do Arquivo. A partir desse ponto, no código, diskScanner significa EmployeeInfo. Txt filename no disco rígido do seu computador. (O nome diskScanner representa um arquivo em seu disco rígido, assim como, nos exemplos anteriores, o teclado do nome representa os botões que você pressiona dia e dia).
Criar um novo objeto File na listagem é como criar um novo objeto Employee mais tarde na mesma listagem. A única diferença é que as classes Empregado e Conta são definidas nos exemplos deste livro.A classe File é definida na API de Java.
Quando você se conecta a um arquivo de disco com o novo Scanner, não se esqueça da nova parte do arquivo. Se você escrever novo Scanner ("EmployeeInfo. Txt") sem o novo Arquivo, o compilador não se importará. (Você não receberá nenhum aviso ou mensagem de erro antes de executar o código.) Mas quando você executar o código, você não receberá nada como os resultados que você espera obter.
-
Você deve se referir à classe Arquivo pelo seu nome completo - java. io. Arquivo . Você pode fazer isso com uma declaração de importação como a da listagem. Alternativamente, você pode desordenar seu código com uma declaração como
Scanner diskScanner = novo Scanner (novo java. Io. Arquivo ("EmployeeInfo. Txt"));
-
Você precisa de uma cláusula lança a IOException . Muitas coisas podem dar errado quando seu programa se conecta ao EmployeeInfo. TXT. Por um lado, seu disco rígido pode não ter um arquivo chamado EmployeeInfo. TXT.
-
Para outro, o arquivo EmployeeInfo. txt pode estar no diretório errado. Para se preparar para esse tipo de calamidade, a linguagem de programação Java toma certas precauções. A linguagem insiste que, quando um arquivo de disco estiver envolvido, você reconhece os possíveis perigos de chamar o novo Scanner.
Você pode reconhecer os perigos de várias maneiras possíveis, mas a maneira mais simples é usar uma cláusula de throws. Na listagem, o cabeçalho do método principal termina com as palavras lança IOException. Ao adicionar estas duas palavras, você apaziga o compilador Java.
É como se você estivesse dizendo "Eu sei que chamar novo Scanner pode levar a problemas. Você não precisa me lembrar. "E, com certeza, adicionar lances IOException ao seu método principal evita que o compilador se queixe. (Sem esta cláusula throws, você recebe uma mensagem de erro de exceção não relatada.)