Java'da dosyaların verilerini okumak ve yazmak için farklı yollar var gibi görünüyor.
Bir dosyadan ASCII verilerini okumak istiyorum. Olası yollar ve aralarındaki farklar nelerdir?
Küçük bir dosyayı okumanın en sevdiğim yolu bir BufferedReader ve bir StringBuilder kullanmaktır. Çok basit ve anlaşılırdır (özellikle etkili olmasa da, çoğu durum için yeterince iyidir):
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();
}
Bazıları Java 7'den sonra try-with-resources (yani otomatik kapatma) özelliklerini kullanmanız gerektiğini belirtmiştir:
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();
}
Bunun gibi dizeleri okuduğumda, genellikle satır başına bazı dize işlemleri yapmak istiyorum, bu yüzden bu uygulamayı kullanıyorum.
Eğer bir dosyayı String'e dönüştürmek istiyorsam, her zaman Apache Commons IO sınıfının IOUtils.toString() yöntemini kullanırım. Kaynağa buradan göz atabilirsiniz:
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();
}
Ve Java 7 ile daha da basit:
try(FileInputStream inputStream = new FileInputStream("foo.txt")) {
String everything = IOUtils.toString(inputStream);
// do something with everything string
}
ASCII bir TEXT dosyasıdır, bu nedenle okuma için Readers
kullanırsınız. Java ayrıca InputStreams
kullanarak ikili bir dosyadan okumayı da destekler. Okunan dosyalar çok büyükse, okuma performansını artırmak için FileReader
üzerine bir BufferedReader
kullanmak isteyebilirsiniz.
Bir Reader
ın nasıl kullanılacağına ilişkin bu makaleyi inceleyin
Ayrıca Thinking In Java adlı bu harika (henüz ücretsiz) kitabı indirmenizi ve okumanızı tavsiye ederim.
Java 7'de:
new String(Files.readAllBytes(...))
(docs) veya
Files.readAllLines(...)
Java 8'de:
Files.lines(..).forEach(...)
Bunun en kolay yolu Java'daki Scanner
sınıfını ve FileReader nesnesini kullanmaktır. Basit bir örnek:
Scanner in = new Scanner(new FileReader("filename.txt"));
Tarayıcı`nın dizeleri, sayıları vb. okumak için çeşitli yöntemleri vardır. Bu konuda daha fazla bilgi için Java dokümantasyon sayfasına bakabilirsiniz.
Örneğin tüm içeriği bir String
içine okumak:
StringBuilder sb = new StringBuilder();
while(in.hasNext()) {
sb.append(in.next());
}
in.close();
outString = sb.toString();
Ayrıca belirli bir kodlamaya ihtiyacınız varsa FileReader
yerine bunu kullanabilirsiniz:
new InputStreamReader(new FileInputStream(fileUtf8), StandardCharsets.UTF_8)