java中separator_java - File.separator和路径中的斜杠之间的区别
java - File.separator和路徑中的斜杠之間的區(qū)別
在Java Path-String中使用/和普通的File.separator有什么區(qū)別?
與雙反斜杠相比,/平臺獨立似乎不是原因,因為兩個版本都在Windows和Unix下運行。
public class SlashTest {
@Test
public void slash() throws Exception {
File file = new File("src/trials/SlashTest.java");
assertThat(file.exists(), is(true));
}
@Test
public void separator() throws Exception {
File file = new File("src" + File.separator + "trials" + File.separator + "SlashTest.java");
assertThat(file.exists(), is(true));
}
}
要重新解釋這個問題,如果/適用于Unix和Windows,為什么還要使用File.separator?
Joe23 asked 2019-04-07T18:51:44Z
14個解決方案
285 votes
你使用File.separator,因為有一天你的程序可能會運行在一個遙遠的土地上開發(fā)的平臺上,一個奇怪的東西和陌生人的土地,馬匹哭泣,奶牛操作所有的電梯。 在這片土地上,人們傳統(tǒng)上使用“:”字符作為文件分隔符,因此JVM盡職盡責(zé)地遵循他們的意愿。
Pointy answered 2019-04-07T18:52:34Z
214 votes
使用用于處理文件的Java庫,您可以在所有平臺上安全地使用File.separator(斜杠,而不是反斜杠)。 庫代碼處理內(nèi)部將事物轉(zhuǎn)換為特定于平臺的路徑。
但是,您可能希望在UI中使用File.separator,因為最好向人們展示在他們的操作系統(tǒng)中有意義的內(nèi)容,而不是對Java有意義的內(nèi)容。
更新:在五分鐘的搜索中,我無法找到記錄下“你總是可以使用斜線”的行為。 現(xiàn)在,我確信我已經(jīng)看到它記錄在案,但由于沒有找到官方參考(因為我的記憶不完美),我堅持使用File.separator,因為你知道這將有效。
T.J. Crowder answered 2019-04-07T18:52:08Z
26 votes
雖然使用File.separator來引用文件名是過度的(對于那些想象遠離陸地的人來說,我想他們的JVM實現(xiàn)將用:替換/,就像windows jvm用\替換它一樣)。
但是,有時您獲取文件引用,而不是創(chuàng)建它,并且您需要解析它,并且為了能夠這樣做,您需要知道平臺上的分隔符。 File.separator可以幫助您實現(xiàn)這一目標(biāo)。
Yishai answered 2019-04-07T18:53:07Z
7 votes
嗯,有比OS和Windows(便攜式設(shè)備等)更多的操作系統(tǒng),Java以其可移植性而聞名。 最佳實踐是使用它,因此JVM可以確定哪個最適合該操作系統(tǒng)。
jpabluz answered 2019-04-07T18:53:32Z
7 votes
雖然它在路上沒有太大的區(qū)別,但它確實在回來的路上。
當(dāng)然你可以在新文件(字符串路徑)中使用'/'或'\',但File.getPath()只會給你一個。
William Billingsley answered 2019-04-07T18:54:04Z
6 votes
好吧,讓我們檢查一些代碼。
File.java行428到435在seperatorChar中:
String p = uri.getPath();
if (p.equals(""))
throw new IllegalArgumentException("URI path component is empty");
// Okay, now initialize
p = fs.fromURIPath(p);
if (File.separatorChar != '/')
p = p.replace('/', File.separatorChar);
讓我們閱讀seperatorChar文檔:
java.io.FileSystem
public abstract String fromURIPath(String path)
必要時對給定的URI路徑字符串進行后處理。 這是用來?? win32,例如,將“/ c:/ foo”轉(zhuǎn)換為“c:/ foo”。 路徑字符串?? 還有斜線分離器; File類中的代碼將翻譯它們?? 這個方法返回后。
這意味著seperatorChar僅在Windows中對URI路徑進行后期處理,因為在下一行中:
p = p.replace('/', File.separatorChar);
它用系統(tǒng)相關(guān)的seperatorChar替換每個'/',你可以隨時確保'/'在每個操作系統(tǒng)中都是安全的。
Alireza Mohamadi answered 2019-04-07T18:55:17Z
3 votes
便攜性簡單明了。
Holograham answered 2019-04-07T18:55:42Z
3 votes
遲到了。 我在Windows 10上使用JDK 1.8和Eclipse MARS 1。
我發(fā)現(xiàn)
getClass().getClassLoader().getResourceAsStream("path\to\resource");
工作和
getClass().getClassLoader().getResourceAsStream("path\to\resource");
不起作用
getClass().getClassLoader().getResourceAsStream("path\to\resource");
不起作用。 最后兩個是等價的。 所以...我有充分的理由不使用File.separator。
i-make-robots answered 2019-04-07T18:56:44Z
1 votes
“Java SE8 for Programmers”聲稱Java將應(yīng)對這兩種情況。 (第480頁,最后一段)。該示例聲稱:
c:\Program Files\Java\jdk1.6.0_11\demo/jfc
會解析得很好。 記下最后一個(Unix風(fēng)格)分隔符。
它很俗氣,而且可能容易出錯,但這正是他們(Deitel和Deitel)聲稱的。
我認為人們而不是Java的混淆是足夠的理由不使用這個(誤?)功能。
Erik Bennett answered 2019-04-07T18:57:29Z
1 votes
正如先生們描述了與變體細節(jié)的區(qū)別。
我想建議在處理程序中的文件時使用Apache Commons io api,類
E_X answered 2019-04-07T18:58:01Z
0 votes
使用主機系統(tǒng)的命名約定指定文件或目錄的路徑名。 但是,File類定義了與平臺相關(guān)的常量,這些常量可用于以獨立于平臺的方式處理文件和目錄名稱。
Files.separator定義用于分隔路徑名中的目錄和文件組件的字符或字符串。 對于Unix,Windows和Macintosh,此分隔符分別為“/”,“\”或“:”。
shubhankar answered 2019-04-07T18:58:37Z
0 votes
如果您使用的是Java 7,請檢查Path.resolve()和Paths.get()。
ceilfors answered 2019-04-07T18:59:02Z
0 votes
使用File.separator使Ubuntu生成文件名為“\”而不是目錄。 也許我對我如何制作文件(和目錄)很懶,并且可以避免它,無論如何,每次使用“/”以避免名稱上帶有“\”的文件
Guedez answered 2019-04-07T18:59:28Z
0 votes
如果您嘗試使用Linux分隔符從一些準(zhǔn)備好的路徑(保存在數(shù)據(jù)庫中,每個示例)創(chuàng)建一個文件,我該怎么辦?
也許只需使用路徑創(chuàng)建文件:
new File("/shared/folder/file.jpg");
但Windows使用不同的分隔符(/)。 那么,是否可以將斜杠分隔符轉(zhuǎn)換為平臺無關(guān)? 喜歡:
new File(convertPathToPlatformIndependent("/shared/folder"));
這個方法/可能會有一些“/”拆分并與File.separator連接。
那么,對我來說,這對于一種獨立于平臺的語言來說并不好(對吧?)而且Java已經(jīng)支持在Windows或Linux上使用/。 但是如果你正在使用路徑并且每次都需要記住這個轉(zhuǎn)換,這將是一場噩夢,你將不會對未來的應(yīng)用程序有任何實際的好處(可能在@Pointy描述的宇宙中)。
Dherik answered 2019-04-07T19:00:24Z
總結(jié)
以上是生活随笔為你收集整理的java中separator_java - File.separator和路径中的斜杠之间的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 星巴克兼职一小时多少钱?(今年)
- 下一篇: java double转换符_java中