Šķiet, ka ir dažādi veidi, kā lasīt un rakstīt failu datus Java.
Es gribu nolasīt ASCII datus no faila. Kādi ir iespējamie veidi un to atšķirības?
Mans iecienītākais veids, kā nolasīt nelielu failu, ir izmantot BufferedReader un StringBuilder. Tas ir ļoti vienkārši un vienkārši (lai gan ne īpaši efektīvi, bet pietiekami labi lielākajā daļā gadījumu):
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}
Daži ir norādījuši, ka pēc Java 7 ir jāizmanto try-with-resources. (t. i., automātiskās aizvēršanas) funkcijas:
try(BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
}
Kad es lasu šādas rindas, es parasti tik un tā gribu veikt virknes apstrādi katrā rindā, tāpēc tad es izvēlos šo implementāciju.
Lai gan, ja es gribu vienkārši nolasīt failu kā virkni, es vienmēr izmantoju Apache Commons IO ar klases IOUtils.toString() metodi. Jūs varat aplūkot avotu šeit:
http://www.docjar.com/html/api/org/apache/commons/io/IOUtils.java.html.
FileInputStream inputStream = new FileInputStream("foo.txt");
try {
String everything = IOUtils.toString(inputStream);
} finally {
inputStream.close();
}
Un vēl vienkāršāk ar Java 7:
try(FileInputStream inputStream = new FileInputStream("foo.txt")) {
String everything = IOUtils.toString(inputStream);
// do something with everything string
}
ASCII ir TEKSTA fails, tāpēc lasīšanai jāizmanto Readers
. Java atbalsta arī lasīšanu no bināra faila, izmantojot InputStreams
. Ja nolasāmie faili ir lieli, tad, lai uzlabotu nolasīšanas veiktspēju, ir jāizmanto `BufferedReader
virs FileReader
.
Izlasiet šo rakstu par to, kā izmantot Reader
.
Es ieteiktu arī lejupielādēt un izlasīt šo brīnišķīgo (vēl bezmaksas) grāmatu ar nosaukumu Thinking In Java.
In Java 7:
new String(Files.readAllBytes(...))
(docs) vai
Files.readAllLines(...)
Javā 8:
Files.lines(..).forEach(...)
Vieglākais veids ir izmantot Java Scanner
klasi un failu lasītāja objektu. Vienkāršs piemērs:
Scanner in = new Scanner(new FileReader("filename.txt"));
Scanner
ir vairākas metodes virkņu, skaitļu utt. lasīšanai... Plašāku informāciju par to var atrast Java dokumentācijas lapā.
Piemēram, visa satura nolasīšana String
:
StringBuilder sb = new StringBuilder();
while(in.hasNext()) {
sb.append(in.next());
}
in.close();
outString = sb.toString();
Arī tad, ja jums ir nepieciešama īpaša kodēšana, varat izmantot šo, nevis FileReader
:
new InputStreamReader(new FileInputStream(fileUtf8), StandardCharsets.UTF_8)