W File
klasie są dwa ciągi, separator
i pathSeparator
.
Co za różnica? Kiedy powinienem używać jednego na drugim?
W File
klasie są dwa ciągi, separator
i pathSeparator
.
Co za różnica? Kiedy powinienem używać jednego na drugim?
Odpowiedzi:
Jeśli masz na myśli, File.separator
a File.pathSeparator
następnie:
File.pathSeparator
służy do oddzielania poszczególnych ścieżek plików na liście ścieżek plików. Rozważ w systemie Windows zmienną środowiskową PATH. Używasz ;
oddzielić ścieżki plików więc na Windows File.pathSeparator
będzie ;
.
File.separator
jest albo /
albo \
, który jest używany do dzielenia się ścieżkę do pliku określonego. Na przykład w systemie Windows jest to \
lubC:\Documents\Test
File.separator
należy File.fileSeparator
regardingFile.pathSeparator
File
. Myślę, że sugerowana jest część pliku. Ale kto wie, dlaczego zrobili wiele z tego, co zrobili z Javą.
Podczas budowania ścieżki do pliku używasz separatora. Tak więc w unixie separatorem jest /
. Więc jeśli chcesz zbudować ścieżkę uniksową /var/temp
, zrobiłbyś to w ten sposób:
String path = File.separator + "var"+ File.separator + "temp"
Korzystasz z tego, pathSeparator
gdy masz do czynienia z listą plików, takich jak ścieżka klasy. Na przykład, jeśli Twoja aplikacja jako argument przyjęła listę słoików, standardowym sposobem formatowania tej listy w systemie Unix jest:/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar
Biorąc pod uwagę listę plików, zrobiłbyś coś takiego:
String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
/var/temp
że jest to bezużyteczne, File.separator
ponieważ masz już kod zależny od platformy. Równie dobrze może zakodować ścieżkę.
java.io.File
klasa zawiera cztery statyczne zmienne separujące. Aby lepiej zrozumieć, zrozummy za pomocą jakiegoś kodu
Zauważ, że wszystkie są zmiennymi końcowymi i zależą od systemu.
Oto program Java do drukowania tych zmiennych separatora. 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);
}
}
Wyjście powyższego programu w systemie Unix:
File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :
Dane wyjściowe programu w systemie Windows:
File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;
Aby nasza platforma programu była niezależna, zawsze powinniśmy używać tych separatorów do tworzenia ścieżki do pliku lub odczytywania dowolnych zmiennych systemowych, takich jak PATH, CLASSPATH.
Oto fragment kodu pokazujący, jak poprawnie używać separatorów.
//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");
String
I char
zwrócony przez wyżej wymienionych metod nie zwróci prawidłowo sformatowany odwrotny ukośnik (jeśli w systemie Windows).