File.separator vs FileSystem.getSeparator () vs System.getProperty (“file.separator”)?


136

Platforma bağımlı "dosya ayırıcıyı" platformdan bağımsız hale getirmenin üç özdeş yolu vardır:

Hangisini ne zaman kullanacağımıza nasıl karar veririz?

Aralarında fark bile var mı?


Burada platforma bağlı dosya ayırıcıyı gerçekten almıyor musunuz? Sadece platformdan bağımsız bir malikanede.
steinybot

@Steiny, Yea, güncellendi.
Pacerier

Tipik bir Java Sorusu en az 3 veya daha fazla cevabı var
Stimpson Cat

Yanıtlar:


142

System.getProperties()System.setProperty(String key, String value)komut satırı parametrelerine çağrılarla veya komut satırı parametreleriyle geçersiz kılınabilir-Dfile.separator=/

File.separator varsayılan dosya sistemi için ayırıcıyı alır.

FileSystems.getDefault() size varsayılan dosya sistemini getirir.

FileSystem.getSeparator()dosya sistemi için ayırıcı karakteri alır. Bir örnek yöntemi olarak, kodunuzun bir JVM'deki birden fazla dosya sisteminde çalışması için gerekli olması durumunda, varsayılandan farklı bir dosya sistemini kodunuza aktarmak için bunu kullanabileceğinizi unutmayın.


2
Cool = D Btw "birden fazla dosya sisteminin çalıştırılması" konusunu biraz açıklayabilir misiniz?
Pacerier

4
@Pacerier Teorik olarak, ayırıcı karakteri ":" olan yeni bir dosya sistemi (BringerFS) yazsaydım ve biri NTFS'de diğeri BringerFS'de olmak üzere 2 bölümlü bir makineniz varsa, bu işlevsellik her ikisini de ( Ayrıca bir Java Dosya Sistemi sağlayıcısı yazdım).
11:05

Demek istediğim pratikte, birisi Windows ve bir UNIX olmak üzere 2 bölüme sahip ve uygulamamı (Windows bölümünde) çalıştırıyor gibi, sınıfın UNIX dosya sistemine erişebileceği gibi, kullanışlı mı? (Yüklü başka bir FileSystem olmadığım için bunu gerçekten test
edemedim

1
Windows'taki dosya sistemleri için sürücülerin çoğunun, işletim sisteminin ve taşınabilir olmayan uygulamaların çalışmasına izin verecek şekilde bir 'Windows tarzı' dosya sistemi API'sine çeviri gerçekleştirdiğinden şüpheleniyorum. Pratik kullanım, Windows gibi sabit bir paradigma olmadan garip ve harika dosya sistemlerini destekleyen bir işletim sistemi için olmalıdır.
Bringer128

Oh, ve diğer sorunuzu cevaplamak için - FileSystemele aldığınız her dosya sistemi için farklı bir örnek olurdu .
Bringer128

31

Kodunuz dosya sistemi sınırlarını geçmiyorsa, yani yalnızca bir dosya sistemiyle çalışıyorsanız, kullanın java.io.File.separator.

Bu, açıklandığı gibi, FS'niz için varsayılan ayırıcıyı size verecektir. Bringer128'in açıkladığı gibi, System.getProperty("file.separator")komut satırı seçenekleri ile geçersiz kılınabilir ve tip kadar güvenli değildir java.io.File.separator.

Sonuncusu java.nio.file.FileSystems.getDefault().getSeparator();Java 7'de tanıtıldı, bu nedenle kodunuzun eski Java sürümlerinde taşınabilir olmasını istiyorsanız şimdilik göz ardı edebilirsiniz.

Yani, bu seçeneklerin her biri neredeyse diğerleriyle aynıdır, ancak tam olarak değil. İhtiyaçlarınıza uygun birini seçin.


Is java.iolehine önerilmemektedir java.nio?
Pacerier

13
@ Pacer: hayır, itiraz edilmiyor. java.iobiraz daha düşük bir seviyedir java.nio, ancak yine de çok ve yaygın olarak yararlıdır. Farklılıkları burada görebilirsiniz: blogs.oracle.com/slc/entry/javanio_vs_javaio . nioyerini almaz io, birden fazla şekilde uzatır (ve iokaputun altında kullanır ).
darioo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.