Denne artikkelen gir en grunnleggende forklaring på hvordan du kan lese lokal tekst og byte -filer i Java. For å lese en tekstfil, bruk klassen, FileReader. For å lese en byte -fil, bruk klassen, FileInputStream. Begge klassene er i javaen.io.* pakke, som skal importeres. Den første halvdelen av denne artikkelen omhandler lesing av tekstfiler, og andre omgang tar for seg lesingen av byte -filer.
Lese tekstfiler
Konstruere et FileReader -objekt
Før du lærer hvordan du konstruerer et FileReader -objekt, oppretter du følgende tekstfil, med en tekstredigerer og trykk Enter -tasten på slutten av de to første linjene:
En tekst 1 en tekst 1 en tekst 1 en tekst 1 en tekst 1
B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2
C Tekst 3 C Tekst 3 C Tekst 3 C Tekst 3 C Tekst 3
Hvis Enter -tasten ikke trykkes på slutten av den siste linjen, kan tekstredigereren legge til en ny linje når filen er lagret. Etter å ha produsert den forrige teksten, lagrer du innholdet, med navnet Temp.txt, ved hjelp av Text Editor -menyen, bruker@vert: ~/dir1 $, inn i katalogen. Dette betyr at katalogen, Dir1, burde vært opprettet.
Konstruere en filleser
FileReader -klassen har fem konstruktører. Bare en er illustrert i denne artikkelen (for å holde artikkelen kort). Syntaksen for konstruktøren er:
Public FileReader (String Filname) kaster FilenotFoundExceptionDette opprettes i minnet en strøm (kopi) av filen, hvis bane og navn er strengen, filnavn. Den kaster en filenotfoundException hvis filen ikke finnes i katalogen angitt. Etter å ha kopiert filinnholdet, må det åpnede filobjektet lukkes for å frigjøre systemressurser knyttet til den åpne filen.
Viktige metoder for FileReader
Hvis konstruktøren er opprettet, blir filen ansett som åpen. Etter å ha brukt filen, må filen lukkes. Syntaksen for å lukke en fil er:
public void Close () kaster IOExceptionEtter at filen nettopp er åpnet, har effektiv lesing av filen ennå ikke skjedd. For å lese det ene karakteren om gangen (den ene den neste), bruk syntaks for FileReader -metoden:
public int Read () kaster IOExceptionDette returnerer tegnet (som heltall) lest eller -1 hvis slutten av strømmen (filkopstrømmen i minnet) er nådd.
For å lese den neste sekvensen av tegn på filen, til en matrise, bruker syntaksen til FileReader -metoden:
Public Int Read (Char [] CBUF, Int Off, Int len) kaster IOExceptionDet returnerer antall tegn som ble lest eller -1 hvis slutten av strømmen ble nådd. Av i syntaks betyr forskyvning. Det er indeksen i filen der avlesningen av følgende sekvens av tegn er å starte. Len er antall tegn å lese. Det skal være lengden på matrisen, mens CBUF er matrisen.
Husk at FileReader -objektet må lukkes med sin nære metode etter denne effektive lesningen.
Syntaksen til metoden, for å vite om den neste lesen ikke kommer tilbake -1, er:
offentlig boolsk klar () kaster IOExceptionDet returnerer sant hvis det er noe å leses og usant ellers.
Lesing i en streng
Følgende kode, leser den forrige filen, karakter-for-karakter, inn i en StringBuilder-streng:
StringBuilder SB = new StringBuilder ();Koden begynner med oppstart av et StringBuilder -objekt, SB. Deretter er det prøvefangstkonstruksjonen. Try-block starter med oppstart av filerereren, FR. Og det er mens-sløyfen, som itererer til den er klar () tilbake FALSE. Den første uttalelsen i While-loop leser og returnerer neste karakter som et heltall. Det må kastes til røye. Neste uttalelse i whow-loop legger neste tegn til strengen, SB. Utgangen er:
En tekst 1 en tekst 1 en tekst 1 en tekst 1 en tekst 1Det er akkurat filens innhold, men den la til en ekstra linje i forfatterens datamaskin.
Les inn i en matrise
Når du leser inn i en matrise, må innholdet i matrisen slippes, for neste sekvens av tegn som skal leses. Følgende kode illustrerer dette:
StringBuilder SB = new StringBuilder ();Verdien av forskyvning må økes for hver iterasjon med lengden på matrisen. Utgangen er:
En tekst 1 en tekst 1 en tekst 1 en tekst 1 en tekst 1Det er nøyaktig som innholdet i filen, men den la til ekstra linje, i forfatterens datamaskin.
Lese byte -filer
Konstruere et FileInputStream -objekt
Følgende bildefil kalles stolper.png. Det er i katalogbrukeren@vert: ~/dir1 $, som er den samme katalogen som temp.tekst. Den består av bare tre fargestjerner:
Konstruere en FileInputStream
En konstruktør for et FileInputStream -objekt er:
public FileInputStream (String Name) kaster filenotfoundExceptionSiden det kaster et unntak, bør det være i en prøvefangstkonstruksjon. Husk at denne klassen er for å lese byte.
Viktige metoder for FileInputStream
Hvis konstruktøren er opprettet, blir filen ansett som åpen. Etter å ha lest bytene, må filen lukkes, ved å bruke følgende syntaks:
public void Close () kaster IOExceptionEtter at filen nettopp er åpnet, har effektiv lesing av filen ennå ikke skjedd. For å lese en byte om gangen (den ene deretter den neste), bruk syntaks for FileInputStream -metoden:
public int Read () kaster IOExceptionDette returnerer byte (som heltall) lest, eller -1 hvis slutten av strømmen (filkopstrømmen i minnet) er nådd.
Husk at etter denne effektive lesningen, må FileInputStream -objektet lukkes, med sin nære metode.
For å ha et estimat av antall byte som gjenstår å lese, bruk metodesyntaks:
Offentlig int tilgjengelig () kaster IOExceptionSiden denne metoden returnerer et estimat, når man brukes i forbindelse med Read (), kan man ikke være sikker på at alle byte på filen er lest. Og følgende metode som leser alle byte, bør foretrekkes:
Offentlig byte [] ReadallBytes () kaster IOExceptionDenne metoden returnerer alle gjenværende byte, men vil fortsatt lese hele filen.
Lesing inn i en arraylist
ArrayList må importeres fra Java.util.* pakke. Følgende kode leser et estimat av alle byte til et ArrayList -objekt:
ArrayList Al = new ArrayList ();Koden begynner med oppstart av et ArrayList -objekt, Al. Deretter er det prøvefangstkonstruksjonen. Try-blokken begynner med oppstart av FileInputStream, FIR. Og det er mens-sløyfen, som itererer til tilgjengelig () og antyder at det ikke er igjen noen byte. Den første uttalelsen i While-loop leser og returnerer neste byte som et heltall. Det må kastes til en byte. Neste uttalelse i While-Loop legger til (legger til) den neste tegnet til listen, Al. Utgangen er:
[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, - 10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1 , -96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110, -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, - 26, -70, 44, -41, 5, 104, 58, -99 - - - og fortsetter - - -]Byte er heltall. Forhåpentligvis består bildet av de tre foregående stolpene av alle disse byte. Ideen er at programmereren skal endre noen av bytene, endre bildet og deretter lagre resultatet; deretter-display det med bildesiewer mens du presenterer et modifisert bilde. Imidlertid er denne ekstra planen ikke adressert i denne artikkelen.
Les inn i en matrise
Readallbytes () -metoden returnerer en rekke byte. Så bare motta returverdiene, med en byte -matrise, som følgende kode viser:
byte [] arr = ny byte [1000];Koden begynner med erklæringen om matrisen som vil motta byte. Størrelsen (lengden) her skal være over estimert størrelse. Estimert størrelse kan oppnås med den tilgjengelige () metoden. Hovedkoden er i prøveblokken. Utgangen er:
-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, -10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1, - 96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110 , -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, -26, -70, 44, -41, 5, 104, 58, -99, - - - og fortsetter - - -Denne utgangen og den forrige er den samme på forfatterens datamaskin.
Konklusjon
Lokal tekst- og byte -filer kan leses. For å lese en tekstfil, bruk strømklassen, FileReader. For å lese en byte -fil, bruk strømklassen, FileInputStream. Begge klassene er i javaen.io.* pakke, som skal importeres. Disse to klassene har konstruktører og metoder som muliggjør lesing. Vi håper du fant den artikkelen nyttig. Sjekk ut andre Linux -hint -artikler for flere tips og opplæringsprogrammer.