W Fileklasie są dwa ciągi, separatori pathSeparator.
Co za różnica? Kiedy powinienem używać jednego na drugim?
W Fileklasie są dwa ciągi, separatori pathSeparator.
Co za różnica? Kiedy powinienem używać jednego na drugim?
Odpowiedzi:
Jeśli masz na myśli, File.separatora File.pathSeparatornastępnie:
File.pathSeparatorsł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.pathSeparatorbędzie ;.
File.separatorjest 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.separatornależy File.fileSeparatorregardingFile.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, pathSeparatorgdy 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.separatorponieważ masz już kod zależny od platformy. Równie dobrze może zakodować ścieżkę.
java.io.Fileklasa 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");
StringI charzwrócony przez wyżej wymienionych metod nie zwróci prawidłowo sformatowany odwrotny ukośnik (jeśli w systemie Windows).