SORU
28 Kasım 2008, Cuma


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
28 Kasım 2008, Cuma


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jay Will

    Jay Will

    19 NİSAN 2006
  • Thehalopianoplayer

    Thehalopiano

    4 ŞUBAT 2011
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012