"Ah, Rishi! Merhaba!"

"Merhaba Amigo! Hayat nasıl?"

"Harika. Bilaabo az önce bana File ve onunla nasıl çalışılacağı hakkında bir sürü ilginç şey söyledi."

"Olduğu gibi, bu konuya ekleyeceğim bir şey olduğunu düşünüyorum."

"Gerçekten mi? O zaman seni dinliyorum."

"Tamam, dinle. Java sürekli gelişiyor. Geliştiricileri sürekli olarak farklı şeyleri daha verimli yapmanın yeni yollarını arıyor. Java 7'de File sınıfına bir alternatif eklediler."

Dosyalar, Yol - 1

"Alternatif?"

"Evet. File sınıfını temel aldılar, bazı yeni şeyler eklediler, yöntemleri yeniden adlandırdılar ve sonra da ikiye ayırdılar. Yani artık iki yeni sınıf var: Path ve Files . Path  aslında File'ın yeni benzeri. sınıfı ve File bir yardımcı sınıftır (Arrays and Collections sınıflarına benzer).File sınıfının tüm statik yöntemleri oraya gider.Bunu bu şekilde yapmak, OOP açısından 'daha doğru' olur."

"Pekala, eğer OOP açısındansa, o zaman tamam. Peki ne değişti?"

"İlk olarak, String  ve File nesnelerini döndüren yöntemleri yeniden üretmemeye karar verdiler  . Path sınıfında, tüm yöntemler bir Path  döndürür .

"İkincisi, pek çok statik yardımcı yöntemi Files sınıfına taşıdılar ."

"Üçüncüsü, göreli yollarla çalışmak daha uygun hale geldi."

"İşte yöntemlerin bir listesi:"

Path sınıfının yöntemleri Tanım
boolean isAbsolute() Yol mutlak ise true değerini döndürür.
Path getRoot() Geçerli yolun kökünü, yani en üstteki dizini döndürür.
Path getFileName() Geçerli yoldan dosya adını döndürür.
Path getParent() Geçerli yoldan dizini döndürür.
boolean startsWith(Path other) Geçerli yolun geçen yolla başlayıp başlamadığını kontrol eder.
boolean endsWith(Path other) Geçerli yolun geçen yolla bitip bitmediğini kontrol eder.
Path normalize() Geçerli yolu normalleştirir. Örneğin, «c:/dir/dir2/../a.txt» öğesini «c:/dir/a.txt» biçimine dönüştürür
Path relativize(Path other) İki yolun göreli yolunu, yani «yollar arasındaki farkı» hesaplar
Path resolve(String other) Geçerli ve göreli yolları kullanarak mutlak bir yolu çözer.
URI toUri() Geçerli yol/dosya ise URI'yi döndürür.
Path toAbsolutePath() Göreceli ise yolu mutlak yola dönüştürür.
File toFile() Geçerli Path nesnesine karşılık gelen bir File nesnesi döndürür.

"Ve şu anki yol - nedir bu?"

"Bu, yöntemleri çağrılan Path nesnesinin yapıcısına iletilen yoldur."

"Tamam. Peki, Files sınıfının hangi yöntemleri var?"

"Bir yere yetişmek için aceleniz mi var? Hemen anlatayım. İşte en önemli yöntemler:"

Files sınıfının yöntemleri Tanım
Path createFile(…) Diskte bir dosya oluşturur.
Path createDirectory(…) Bir dizin oluşturur.
Path createDirectories(…) Bir dizin ve tüm alt dizinlerini oluşturur.
Path createTempFile(…) Geçici bir dosya oluşturur.
Path createTempDirectory(…) Geçici bir dizin oluşturur.
void delete(Path path) Bir dosyayı siler.
Path copy(Path source, Path target,…) Bir dosyayı kopyalar.
Path move(Path source, Path target,…) Bir dosyayı taşır.
boolean isSameFile(Path, Path) İki dosyayı karşılaştırır.
boolean isDirectory(Path) Yol bir dizin midir?
boolean isRegularFile(Path) Yol bir dosya mı?
long size(Path) Dosya boyutunu döndürür.
boolean exists(Path) Aynı ada sahip bir nesne var mı?
boolean notExists(Path) Aynı ada sahip bir nesne yok mu?
long copy(InputStream, OutputStream) Baytları InputStream'den OutputStream'e kopyalar.
long copy(Path, OutputStream) Yoldaki tüm baytları OutputStream'e kopyalar.
long copy(InputStream, Path) InputStream'deki tüm baytları Yol'a kopyalar.
byte[] read(InputStream, int initialSize) InputStream'den bir bayt dizisi okur.
byte[] readAllBytes(Path path) InputStream'den tüm baytları okur.
List<String> readAllLines(Path path,..) Metin dosyasını okur ve bir dize listesi döndürür.
Path write(Path path, byte[] bytes,…) Bir dosyaya bir bayt dizisi yazar.

"Ne kadar ilginç! Pek çok harika işlev ve hepsi aynı yerde."

"Bakın. Diyelim ki internetten bir dosya indirmek ve sonra onu birine göndermek istiyorsunuz. Bunu yapmak için, diskte geçici bir dosya oluşturmak ve okunan verileri ona kaydetmek çok uygundur."

"İnternetten dosya indirmek zor mu?"

"Çok basit. Şu örneğe bakın:"

kod
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"Ve bu kadar?"

"Evet, ne görmeyi bekliyordun? Sadece 4 satır var."

" Satır 1.  Görüntü dosyasının URL'sinin iletildiği bir URL nesnesi oluşturur.

" Satır 2.  url nesnesinde bir dosyayı (InputStream) okumak için bir akış açılır.

" Satır 3.  Yöntem createTempFile, geçici bir dosya oluşturmak için kullanılır.

" 4. Satır.  Files.copy yöntemi, verileri  inputStream şuradan konumuna kopyalar tempFile. İşte bu kadar."

"Dahice!"

"Harika. Beğenmene sevindim. Geri kalan yöntemleri kendi başına çözebileceğini düşünüyorum. Diego'dan sana bunlarla ilgili birkaç görev vermesini isteyeceğim."

"Bu arada, bu malzemeyle ilgili iyi bir bağlantı var"