Nasıl bir dosyanın içeriğini bir Java Dize oluşturmak için?
Bir süredir bu deyim şimdi kullanıyorum. Ve en yaygın, en az ziyaret ettiğim sitelerdeki gibi görünüyor.
Herkes daha iyi/farklı Java bir diziye bir dosyayı okumak için bir yol var mı?
private String readFile( String file ) throws IOException {
BufferedReader reader = new BufferedReader( new FileReader (file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
while( ( line = reader.readLine() ) != null ) {
stringBuilder.append( line );
stringBuilder.append( ls );
}
return stringBuilder.toString();
}
CEVAP
Bir dosyadaki tüm metni okuyun
İşte 7, yarar bir yöntem sarılmış Java için kompakt, sağlam bir deyim:
static String readFile(String path, Charset encoding)
throws IOException
{
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}
Bir dosyadan metin satırları oku
Java 7 convenience method to read a file as lines of text, List<String>
olarak temsil edilen bir ekledi. Bu yaklaşım doğrultusunda "ayırıcılar her satırın sonuna kaldırılır. çünkü kayıplı.
List<String> lines = Files.readAllLines(Paths.get(path), encoding);
Bellek kullanımı
İlk yöntem, o korur Satır sonları, geçici hafıza gerektiren birkaç kez dosya boyutuna, çünkü kısa bir süre raw dosya içeriğini (bir bayt dizisi) ve sorunsuz karakter (her biri 16 bit bile kodlanmış olarak 8 bit dosya) bulunan hafıza anda. En güvenli küçük kullanılabilir hafızaya göre olduğunu bildiğiniz dosyaları için geçerlidir.
İkinci yöntem, satır okuma, kod çözme için giriş bayt tampon dosyanın tamamını içeren gerek yok çünkü genellikle daha fazla bellek etkilidir. Ancak, hala çok büyük dosyaları artık kullanılabilir hafızaya göre uygun değil.
Okuma için büyük dosyaları, ihtiyacınız olan bir farklı tasarım programı, bir okuyan bir yığın metin akışı, süreçler, ve sonra hareket için bir sonraki, yeniden aynı sabit büyüklükte bir bellek bloğu. Burada, "büyük" bilgisayar gözlük bağlıdır. Günümüzde, bu eşik RAM birçok gigabayt olabilir.
Karakter kodlaması
Özgün yazı örneği, eksik olan tek şey, karakter kodlaması. Platform varsayılan istediğin, ama çok nadir olan bazı özel durumlar vardır, ve seçtiğiniz haklı göstermek gerekir.
StandardCharsets
sınıf kodlamalar Java çalışma zamanları gereken bazı sabitleri tanımlayın:
String content = readFile("test.txt", StandardCharsets.UTF_8);
Platform varsayılan the Charset
class kendisinden temin edilebilir
String content = readFile("test.txt", Charset.defaultCharset());
Not: Bu cevap büyük ölçüde Java 6 sürümünü değiştirir. Java 7 programı güvenle kodu basitleştirir, ve eşleştirilmiş baytlık bir arabellek kullanılan eski cevap, eşlenmiş arabellek çöp toplandı kadar silinmesini okunur dosyayı engelledi. "Bu cevap. link düzenlenmiş üzerinden eski sürümü görebilirsiniz
Nasıl alfa-sayısal rasgele bir dize ol...
Nasıl Java genel bir dizi oluşturmak i...
Nasıl en iyi Ruby rastgele bir dize ol...
Nasıl bir dosya oluşturmak ve Java ile...
Nasıl UML diyagramları (özellikle sıra...