File.separator veya File.pathSeparator


519

In Filesınıfında orada iki dizeleri, separatorve pathSeparator.

Fark ne? Birini diğeri ne zaman kullanmalıyım?


6
Adlandırma biraz kafa karıştırıcıdır, böyle bir şeye ihtiyaç duyulan hızlı hızlı bir şekilde korkunçtur (çapraz başvuru Perl). PathSeparatorChar ve separatorChar için örneklere bakın . Veya basit anımsatıcıları kullanın: pathSeparator yolları ayırır.
maaartinus

6
Her ikisini de ekrana yazdırmak için bir dakikanızı ayırmak sorunuzu cevaplardı ...
Jean-François Corbett

13
Genel olarak hemfikir olsam da, sadece kendi sistemine yazdırmak diğer işletim sistemlerinin varyantlarını göstermeyecektir.
b1nary.atr0phy

Yanıtlar:


681

Demek istiyorsan File.separatorve File.pathSeparatorsonra:

  • File.pathSeparatordosya yolları listesindeki tek tek dosya yollarını ayırmak için kullanılır. PATH ortam değişkeni pencerelerde düşünün. Bir kullanmak ;Windows üzerinde öylesine dosya yollarını ayırmak File.pathSeparatorolacaktır ;.

  • File.separator, ya /da \yolu belirli bir dosyaya bölmek için kullanılır. Örneğin Windows'ta \veyaC:\Documents\Test


6
Görünüşe File.separatoredilmelidir File.fileSeparatoriçin ilgiliFile.pathSeparator
Eddy

1
@Eddy Ne demek istediğini görüyorum, ancak sınıf adı olduğundan gereksiz olabilir File. Bence dosya kısmı ima ediliyor. Ama Java ile yaptıklarının çoğunu neden yaptığını kim bilebilir.
user489041

117

Bir dosya yolu oluştururken ayırıcı kullanırsınız. Yani unix'de ayırıcı /. Unix yolunu oluşturmak /var/tempistiyorsanız, bunu şu şekilde yaparsınız:

String path = File.separator + "var"+ File.separator + "temp"

pathSeparatorSınıf yolundaki gibi bir dosya listesi ile uğraşırken kullanın . Örneğin, uygulamanız kavanoz listesini bağımsız değişken olarak aldıysa, bu listeyi unix'te biçimlendirmenin standart yolu şöyledir:/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

Dosyaların bir listesi verildiğinde böyle bir şey yapardınız:

String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);

5
Gibi bir * nix yolu oluşturuyorsanız, zaten platforma bağımlı kodunuz olduğu /var/tempiçin kullanmak işe yaramaz File.separator. Yolu da kodlayabilir.
isapir

109

java.io.Filesınıfı dört statik ayırıcı değişken içerir. Daha iyi anlamak için, bazı kodların yardımıyla anlayalım

  1. separator: Dize olarak platforma bağımlı varsayılan ad-ayırıcı karakteri. Windows için bu '\' ve unix için '/'
  2. separatorChar: Ayırıcı ile aynı, ancak char
  3. pathSeparator: Yol ayırıcı için platforma bağımlı değişken. Örneğin, Unix sistemlerinde ':' ve ';' ile ayrılmış PATH veya CLASSPATH değişken yol listesi Windows sisteminde
  4. pathSeparatorChar: pathSeparator ile aynı ama char

Tüm bunların nihai değişkenler ve sisteme bağlı olduğunu unutmayın.

İşte bu ayırıcı değişkenleri yazdırmak için java programı. FileSeparator.java

import java.io.File;

public class FileSeparator {

    public static void main(String[] args) {
        System.out.println("File.separator = "+File.separator);
        System.out.println("File.separatorChar = "+File.separatorChar);
        System.out.println("File.pathSeparator = "+File.pathSeparator);
        System.out.println("File.pathSeparatorChar = "+File.pathSeparatorChar);
    }

}

Yukarıdaki programın Unix sisteminde çıktısı:

File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :

Programın Windows sisteminde çıktısı:

File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;

Program platformumuzu bağımsız hale getirmek için her zaman dosya ayırıcı oluşturmak veya PATH, CLASSPATH gibi sistem değişkenlerini okumak için bu ayırıcıları kullanmalıyız.

Ayırıcıların doğru şekilde nasıl kullanılacağını gösteren kod snippet'i.

//no platform independence, good for Unix systems
File fileUnsafe = new File("tmp/abc.txt");
//platform independent and safe to use across Unix and Windows
File fileSafe = new File("tmp"+File.separator+"abc.txt");

1
Java'da ters eğik çizgi karakterinin aslında \\ olduğuna dikkat edin, çünkü tek bir ters eğik çizgi diğer özel karakter kısayollarının kaçış karakteri olduğundan, ters eğik çizginin kendisinden kaçmak için kullanılır. StringVe charyukarıda belirtilen yöntemlerle döndü (Windows üzerinde ise) düzgün biçimlendirilmiş ters eğik çizgi dönmek yoktur.
Erik

yeni Dosya ("tmp / abc.txt"); bu windows ve linux için doğru ancak unix new File ("tmp \\ abc.txt") için doğru değil; Bu sorun sadece unix
DEV-Jacol
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.