Hvordan lese fra en lokal fil i Java

Hvordan lese fra en lokal fil i Java
En lokal fil er i harddisken eller en flash -stasjon festet til USB -porten. Filer kan klassifiseres i to kategorier: tekstfiler og byte -filer. Typiske tekstfiler er filer opprettet av en tekstredigerer. Bildefilen er et eksempel på en byte -fil som hovedsakelig består av RAW -byte.

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 FilenotFoundException

Dette 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 IOException

Etter 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 IOException

Dette 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 IOException

Det 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 IOException

Det 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 ();
prøve
FileReaderFR = Ny FileReader ("Dir1/Temp.tekst");
mens (fr.klar())
char ch = (char) fr.lese();
SB.vedlegg (CH);


fangst (unntak e)
e.getMessage ();

System.ute.println (SB);

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 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

Det 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 ();
prøve
FileReaderFR = Ny FileReader ("Dir1/Temp.tekst");
mens (fr.klar())
char [] arr = new char [5];
int offset = 0;
fr.Les (arr, offset, 5);
offset = offset + 5;
System.ute.trykk (ARR);


fangst (unntak e)
e.getMessage ();

System.ute.println ();

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 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

Det 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 filenotfoundException

Siden 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 IOException

Etter 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 IOException

Dette 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 IOException

Siden 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 IOException

Denne 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 ();
prøve
FileInputStream FIR = Ny FileInputStream ("Dir1/Bars.png ");
mens (gran.tilgjengelig ()> 0)
byte bt = (byte) gran.lese();
al.Legg til (BT);


fangst (unntak e)
e.getMessage ();

System.ute.println (al);

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];
prøve
FileInputStream FIR = Ny FileInputStream ("Dir1/Bars.png ");
arr = gran.readallbytes ();

fangst (unntak e)
e.getMessage ();

for (int i = 0; iSystem.ute.print (arr [i] + ",");
System.ute.println ();

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.