1. Pathsınıf

Diskteki dosyalarla bir şeyler yapan bir program yazmak istiyorsanız, bu oldukça kolaydır. Java, hem dosyalarla hem de içerikleriyle çalışmanıza yardımcı olan birçok sınıfa sahiptir.

Java'nın ilk sürümleri, dosyalarla çalışmak için Fileve benzeri sınıfları kullandı. FileInputStreamAncak, Filesınıf artık kullanımdan kaldırılmıştır ve kullanılması önerilmez. Tabii ki, kodda, yöntem parametrelerinde veya sınıf kurucularında yine de karşılaşabilirsiniz.

En başından, sınıfı kullanarak dosyalarla nasıl çalışılacağını öğrenmeye başlayacağız Path. Pathyerini alan sınıftır File. Daha güvenli ve daha verimlidir.

Pathsınıf

Teknik olarak Pathbir sınıf değil, bir arayüz. Bu, her işletim sistemi (ve dosya sistemi) için sınıfın soyundan birinin yazılmasına izin vermek için yapılır Path.

Windows'un dosya yollarını yazmak için bir standardı vardır ve Linux'un başka bir standardı vardır. Elbette dünyada başka birçok işletim sistemi var ve her birinin kendi standardı var.

Bu nedenle arabirim, Pathdosyalarla çalışan yöntemlerde her yerde kullanılır, ancak gerçekte çalışma onun soyundan gelen sınıflar aracılığıyla gerçekleşir: WindowsPath, UnixPath, ...

Pathnesne oluşturma

Bir nesne yaratmak için Path(aslında soyundan gelen sınıfın bir nesnesi olacaktır WindowsPath), şöyle bir ifade kullanmanız gerekir:

Path name = Path.of(path);

Nerede namebir değişkenin adı Pathve pathdosyanın (veya dizinin) adı da dahil olmak üzere dosyanın (veya dizinin) yoludur. Ve ofsınıfın statik bir yöntemidir Path.

Yöntem , program Windows'ta çalışıyorsa nesneler of()oluşturmak için kullanılır . WindowsPathProgram Linux üzerinde çalışıyorsa, UnixPathnesneler oluşturulur. gibi bir kod kullanarak nesne oluşturamazsınız .Pathnew Path()

Örnekler:

kod Not
Path file = Path.of("c:\\projects\\note.txt");
dosyanın yolu
Path directory = Path.of("c:\\projects\\");
dizine giden yol

PathGeçerli bir nesnenin var olması için dosyanın (veya dizinin) var olması gerekmez . Belki de sadece bir dosya oluşturmak istiyorsunuz... Bir Pathnesne güçlendirilmiş gibidir String: diskteki belirli bir dosyaya bağlı değildir — yalnızca diskte belirli bir yolu depolar. Bu kadar.


Path2. Türün Yöntemleri

Arayüz Patholdukça ilginç birkaç yönteme sahiptir. En ilginç olanları aşağıdaki tabloda sunulmaktadır.

Yöntem Tanım
Path getParent()
Üst dizini döndürür
Path getFileName()
Dizin olmadan dosya adını döndürür
Path getRoot()
Bir yoldan kök dizini döndürür
boolean isAbsolute()
Geçerli yolun mutlak olup olmadığını kontrol eder
Path toAbsolutePath()
Yolu mutlak değere dönüştürür
Path normalize()
Bir dizin adındaki joker karakterleri kaldırır.
Path resolve(Path other)
Mutlak ve göreli yollardan yeni bir mutlak yol oluşturur.
Path relativize(Path other)
İki mutlak yoldan göreli bir yol alır.
boolean startsWith(Path other)
Geçerli yolun belirli bir yolla başlayıp başlamadığını kontrol eder
boolean endsWith(Path other)
Geçerli yolun belirli bir yolla bitip bitmediğini kontrol eder
int getNameCount()
/Sınırlayıcı olarak kullanarak yolu parçalara ayırır .
Parça sayısını döndürür.
Path getName(int index)
/Sınırlayıcı olarak kullanarak yolu parçalara ayırır .
Bir parçayı dizinine göre döndürür.
Path subpath(int beginIndex, int endIndex)
/Sınırlayıcı olarak kullanarak yolu parçalara ayırır .
Verilen aralığa karşılık gelen alt yolu döndürür.
File toFile()
Bir nesneyi Pathkullanımdan kaldırılmış bir nesneye dönüştürürFile
URI toUri()
PathBir nesneyi bir URInesneye dönüştürür

Aşağıda mevcut yöntemlerin kısa bir açıklaması bulunmaktadır.


3. Bir yolu parçalara ayırma

Yöntem getParent(), geçerli yol için üst dizine işaret eden yolu döndürür. Bu yolun bir dizin mi yoksa bir dosya mı olduğuna bakılmaksızın:

kod Değer
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

Yöntem getFileName(), son sınırlayıcıdan sonra gelen tek bir dosya (veya dizin) adı döndürür:

kod Değer
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

Yöntem getRoot(), kök dizinin yolunu döndürür:

kod Değer
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Mutlak ve göreceli yollar

İki tür yol vardır: mutlak ve göreli. Mutlak bir yol, kök dizinden başlar. Windows için bu klasör olabilir c:\; Linux için — /dizin

Göreceli bir yol, bazı dizinlere göre anlamlıdır. Yani yolun sonu gibi ama başı yok. Göreceli bir yolu mutlak bir yola dönüştürebilirsiniz ve bunun tersini de yapabilirsiniz.

boolean isAbsolute()yöntem

Yöntem, geçerli yolun mutlak olup olmadığını kontrol eder.

kod Değer
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()yöntem

Yolu mutlak değere dönüştürür. Gerekirse, geçerli çalışma dizinini buna ekler:

kod Değer
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()yöntem

Yolda, bir dizin adı yerine ".." yazabilirsiniz, bu da bir dizine geri gitmek anlamına gelir . Normalleşme bunları ortadan kaldırır. Örnekler:

kod Değer
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)yöntem

Yöntem relativize(), "yollar arasındaki farkları" oluşturmanıza izin verir: bir yol diğerine göre

kod Değer
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
IllegalArgumentException:
iki yolun farklı bir "kökü" vardır (farklı diskler)

Path resolve(Path other)yöntem

Yöntem resolve(), bunun tersini yapar relativize(): mutlak ve göreli bir yoldan yeni bir mutlak yol oluşturur.

kod Değer
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()yöntem

Yöntem, Filenesneyle aynı dosya yolunu depolayan, kullanımdan kaldırılmış bir nesne döndürür Path.

toURI()yöntem

Yöntem, yolu standart bir URI'ye dönüştürür ve dosyanın yolunu içeren bir nesne döndürür:

dosyanın yolu dosyanın URI'si
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt