Hvernig á að lesa skrár á Java

Java býður upp á nokkrar aðferðir til að lesa skrár. Hver af þessum aðferðum er viðeigandi til að lesa mismunandi gerðir af skrám við mismunandi aðstæður. Sumar eru betri til að lesa lengri skrár, aðrar eru betri til að lesa styttri o.s.frv.

Í þessari kennslu munum við nota eftirfarandi Java bekki til að lesa skrár

  • BufferedReader
  • Skrár
  • Skanni

Í gegnum kennsluna erum við að nota skrá sem er geymd í src skrá þar sem slóðin að skránni er src/file.txt.


Geymdu nokkrar línur af texta í þessari skrá áður en haldið er áfram.

Athugið:Þú verður að höndla villurnar rétt þegar þú notar þessar útfærslur til að halda þér við bestu kóðunarhætti.

Lestur textaskrár í Java með BufferedReader

The BufferedReader bekkur les stafarinntakstreymi. Það laðar stafir í biðminni með sjálfgefna stærð 8 KB til að gera lestrarferlið skilvirkara. Ef þú vilt lesa skrá línu fyrir línu er það góður kostur að nota BufferedReader.


BufferedReader er duglegur að lesa stórar skrár.



import java.io.*; public class FileReaderWithBufferedReader {
public static void main(String[] args) throws IOException{We
String file = 'src/file.txt';
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as required

System.out.println(curLine);
}
bufferedReader.close();
} }

The readline() aðferð skilar núlli þegar lok skráar er náð.

Athugið:Ekki gleyma að loka skránni þegar lestri er lokið.

Lestur UTF-8 kóðuð skrá í Java með BufferedReader

Við getum notað BufferedReader bekk til að lesa UTF-8 kóðaða skrá.

Í þetta skiptið förum við framhjá InputStreamReader mótmæla þegar þú býrð til BufferedReader dæmi.


import java.io.*; public class EncodedFileReaderWithBufferedReader {
public static void main(String[] args) throws IOException {
String file = 'src/fileUtf8.txt';
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), 'UTF-8'));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as you require

System.out.println(curLine);
}
} }


Nota Java skrár flokk til að lesa skrá

Java Files bekk, kynnt í Java 7 í Java NIO, samanstendur að fullu af kyrrstæðum aðferðum sem starfa á skrám.

Notkun Files bekk, getur þú lesið allt innihald skrár í fylki. Þetta gerir það að góðu vali til að lesa minni skrár.

Við skulum sjá hvernig við getum notað Files flokk í báðum þessum atburðarásum.

Lestur smáskrár í Java með Files Class

The readAllLines() aðferð við Files bekk gerir kleift að lesa allt innihald skrárinnar og geymir hverja línu í fylki sem strengi.


Þú getur notað Path bekk til að fá leiðina að skránni síðan Files bekkur samþykkir Path hlut skráarinnar.

import java.io.IOException; import java.nio.file.*; import java.util.*; public class SmallFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
List lines = Files.readAllLines(path);
} }

Þú getur notað readAllBytes() til að sækja gögnin sem eru geymd í skránni í bæti fylki í stað strengja fylkis.

byte[] bytes = Files.readAllBytes(path);

Að lesa stórar skrár á Java með Files Class

Ef þú vilt lesa stóra skrá með Files bekk, getur þú notað newBufferedReader() aðferð til að fá dæmi um BufferedReader bekk og lestu skrána línu fyrir línu með því að nota BufferedReader.

import java.io.*; import java.nio.file.*; public class LargeFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
BufferedReader bufferedReader = Files.newBufferedReader(path);

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

System.out.println(curLine);
}
bufferedReader.close();
} }


Lestur skrár með Files.lines ()

Java 8 kynnti nýja aðferð fyrir Files bekkinn til að lesa alla skrána í Stream af strengjum.


import java.io.IOException; import java.nio.file.*; import java.util.stream.Stream; public class FileReaderWithFilesLines {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
Stream lines = Files.lines(path);

lines.forEach(s -> System.out.println(s));
lines.close();
} }


Lestur textaskrár í Java með skanni

The Scanner bekkur skiptir innihaldi skjals í hluta með tilteknum afmörkun og les það hluta fyrir hluta. Þessi aðferð hentar best til að lesa efni sem aðskilið er með afmörkun.

Til dæmis, Scanner bekkur er tilvalinn til að lesa lista yfir heiltölur aðgreindar með hvítum bilum eða lista yfir strengi aðgreindir með kommum.

Sjálfgefinn afmörkun á Scanner bekkur er hvítt rými. En þú getur stillt afmörkunina á annan staf eða reglulega segð. Það hefur einnig ýmsar næstu aðferðir, svo sem next(), nextInt(), nextLine() og nextByte(), til að umbreyta efni í mismunandi gerðir.

import java.io.IOException; import java.util.Scanner; import java.io.File; public class FileReaderWithScanner {
public static void main(String[] args) throws IOException{
String file = 'src/file.txt';
Scanner scanner = new Scanner(new File(file));
scanner.useDelimiter(' ');

while(scanner.hasNext()){

String next = scanner.next();

System.out.println(next);
}
scanner.close();
} }

Í dæminu hér að ofan stillum við afmörkunina á hvítt bil og notum next() aðferð til að lesa næsta hluta efnisins aðgreindur með hvítu svæði.


Lestur heila skrá

Þú getur notað Scanner bekk að lesa alla skrána í einu án þess að keyra lykkju. Þú verður að standast “\Z” sem afmörkun fyrir þetta.

scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close(); Athugið:Skanni bekkurinn er ekki samstilltur og því ekki öruggur með þræði.

Niðurstaða

Eins og þú sást í þessari kennslu, býður Java upp á margar aðferðir sem þú getur valið úr eftir eðli verkefnisins sem þú hefur til að lesa textaskrár. Þú getur notað BufferedReader að lesa stórar skrár línu fyrir línu.

Ef þú vilt lesa skrá þar sem innihald hennar er aðskilið með afmörkun skaltu nota Scanner bekk.

Einnig er hægt að nota Java NIO Files bekk til að lesa bæði litlar og stórar skrár.