1. Filessınıf

Dosya sınıfı

Dosyalarla çalışmak için kaygan bir yardımcı program sınıfı vardır — java.nio.file.Files. Her durum için yöntemleri vardır. Bu sınıfın tüm metotları statiktir ve Path nesnesi üzerinde çalışır. Pek çok yöntem var, bu yüzden yalnızca en önemlilerini ele alacağız:

Yöntem Tanım
Path createFile(Path path)
Yolu olan yeni bir dosya oluşturur.path
Path createDirectory(Path path)
Yeni bir dizin oluşturur
Path createDirectories(Path path)
Birden çok dizin oluşturur
Path createTempFile(prefix, suffix)
Geçici bir dosya oluşturur
Path createTempDirectory(prefix)
Geçici bir dizin oluşturur
void delete(Path path)
Boşsa bir dosya veya dizini siler
Path copy(Path src, Path dest)
Bir dosyayı kopyalar
Path move(Path src, Path dest)
Bir dosyayı taşır
boolean isDirectory(Path path)
Yolun bir dosya değil de bir dizin olup olmadığını kontrol eder
boolean isRegularFile(Path path)
Yolun bir dizin değil de bir dosya olup olmadığını kontrol eder
boolean exists(Path path)
Verilen yolda bir nesne olup olmadığını kontrol eder
long size(Path path)
Dosya boyutunu döndürür
byte[] readAllBytes(Path path)
Bir dosyanın tüm içeriğini bir bayt dizisi olarak döndürür
String readString(Path path)
Bir dosyanın tüm içeriğini bir dize olarak döndürür
List<String> readAllLines(Path path)
Bir dosyanın tüm içeriğini bir dize listesi olarak döndürür
Path write(Path path, byte[])
Bir dosyaya bir dizi bayt yazar
Path writeString(Path path, String str)
Bir dosyaya bir dize yazar
DirectoryStream<Path> newDirectoryStream(Path dir)
Verilen dizinden bir dosya koleksiyonu (ve alt dizinler) döndürür

2. Dosya ve dizin oluşturma

Dosya ve dizinlerin oluşturulması çok kolaydır. Bazı örneklerle kendimizi ikna edelim:

kod Not
Files.createFile(Path.of("c:\\readme.txt"));
bir dosya oluşturur
Files.createDirectory(Path.of("c:\\test"));
Bir dizin oluşturur
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Bir dizin ve yoksa gerekli tüm alt dizinleri oluşturur.

3. Kopyalama, taşıma ve silme

Dosyaları kopyalamak, taşımak ve silmek de bir o kadar kolaydır. Bu aynı zamanda dizinler için de geçerlidir, ancak boş olmaları gerekir.

kod Not
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Bir dosyayı kopyalar
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Bir dosyayı taşır ve yeniden adlandırır
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Bir dosyayı siler

4. Bir dosyanın türünü ve varlığını kontrol etme

Başkası tarafından sağlanan bir yolunuz olduğunda, bunun bir dosya mı yoksa dizin mi olduğunu bilmek istersiniz. Ve genel olarak böyle bir dosya/dizin var mı yok mu?

Bunun için de özel yöntemler var. Ayrıca bir dosyanın uzunluğunu kolayca öğrenebilirsiniz:

kod Not
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. Dosya içerikleriyle çalışma

Son olarak, bir dosyanın içeriğini okumayı veya yazmayı kolaylaştıran bir dizi yöntem vardır. Örnek:

kod Tanım
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

Dosyanın içeriğini bir dize listesi olarak okuyun.

Dizeleri göster


6. Bir dizinin içeriğini alma

En ilginç yöntem hala devam ediyor. Belirli bir dizindeki dosyaları ve alt dizinleri almak için kullanılır.

newDirectoryStream()Özel bir nesne döndüren yöntemden bahsediyoruz DirectoryStream<Path>. Belirli bir dizinin tüm dosyalarını ve alt dizinlerini almak için kullanabileceğiniz bir yineleyiciye(!) sahiptir.

Bu göründüğünden daha kolay.

kod Tanım
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


Dosya listesiyle bir nesne alın
Dosya listesi üzerinde döngü yapın

Nesnenin DirectoryStream<Path>iki özelliği vardır. İlk olarak, dosya yollarını döndüren bir yineleyiciye sahiptir ve bu nesneyi bir döngü içinde kullanabiliriz for-each.

İkincisi, bu nesne bir veri akışıdır, bu nedenle yöntem kullanılarak açıkça kapatılmalı close()veya bir try-with-resourcesblok içinde kullanım bildirilmelidir.



7. Files.newInputStreamyöntem

Java 5'ten başlayarak, FileInputStreamve FileOutputStreamsınıfları kullanımdan kaldırılmıştır. Dezavantajlarından biri, bu sınıfların nesneleri oluşturulduğunda, dosyaların hemen diskte oluşturulmasıydı. Ve dosya oluşturmayla ilgili tüm istisnalar potansiyel olarak atılabilir.

Daha sonra bunun en iyi karar olmadığı kabul edildi. java.nio.FilesBuna göre, dosya nesneleri oluşturmak için yardımcı program sınıfının yöntemlerinin kullanılması önerilir .

Dosya oluşturmaya yönelik eski yaklaşım ile yeni yaklaşım arasında bir karşılaştırma aşağıda verilmiştir:

Önce
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Sonrasında
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

Ve bunun için benzer bir değiştirme var FileOutputStream:

Önce
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Sonrasında
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );