Dzień dobry Forumowicze!
W ten letni, upalny dzień postanowiłem poprosić Was o pomoc. Pracuję aktualnie nad prostym generatorem statycznego bloga (wiecie, podajecie folder z plikami .txt, a otrzymujecie folder z plikami .html - posty + strona główna). Mam jednak problem z odczytem pliku tekstowego. Napisałem taką oto klasę o nazwie TextReader z metodą readFile:
package bloggen.main;
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
public class TextReader {
public String[] readFile(String path) throws IOException {
BufferedReader fileReader = null;
String[] readedData;
try {
fileReader = new BufferedReader(new FileReader(path));
int numberOfLines = 0;
while (fileReader.readLine() != null) {
numberOfLines++;
}
readedData = new String[numberOfLines];
for (int i = 0; i < numberOfLines; i++) {
readedData[i] = fileReader.readLine();
}
} finally {
if (fileReader != null) {
fileReader.close();
}
}
return readedData;
}
}
oraz klasę testującą powyższej klasy:
package bloggen.testers;
import bloggen.main.TextReader;
import java.io.IOException;
class TextReaderTester {
public static void main(String[] args) throws IOException {
TextReader tr = new TextReader();
String[] readedFile = tr.readFile("/home/blacky/pliktestowy.txt");
for (String line : readedFile) {
System.out.println(line);
}
}
}
Niestety, pomimo pomyślnej kompilacji, nie wszystko działa tak jak powinno. Oto zawartość pliku pliktestowy.txt:
Pierwsza linijka
Druga linijka
Trzecia linijka
Czwarta linijka
A tak wyglądają wyniki uruchomienia klasy testującej:
run:
null
null
null
null
BUILD SUCCESSFUL (total time: 0 seconds)
Ilość linijek się zgadza (4x null), ale tylko to jest zgodne z oczekiwaniami... Szukałem informacji o tym, ale cóż... Pomożecie? :)
Files.lines
użyć i mieć leniwe czytanie pliku, tylko trzeba pamiętać, by później zamknąć strumień.Stream
rozszerzaAutoCloseable
więc jednak czasem się go zamyka ;) Np. w przypadkuFiles.lines
pod spodem zostaje otwartyReader
i może powodować kłopoty.