java中separator_java - File.separator和路径中的斜杠之间的区别
java - File.separator和路徑中的斜杠之間的區(qū)別
在Java Path-String中使用/和普通的File.separator有什么區(qū)別?
與雙反斜杠相比,/平臺(tái)獨(dú)立似乎不是原因,因?yàn)閮蓚€(gè)版本都在Windows和Unix下運(yùn)行。
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));
}
}
要重新解釋這個(gè)問題,如果/適用于Unix和Windows,為什么還要使用File.separator?
Joe23 asked 2019-04-07T18:51:44Z
14個(gè)解決方案
285 votes
你使用File.separator,因?yàn)橛幸惶炷愕某绦蚩赡軙?huì)運(yùn)行在一個(gè)遙遠(yuǎn)的土地上開發(fā)的平臺(tái)上,一個(gè)奇怪的東西和陌生人的土地,馬匹哭泣,奶牛操作所有的電梯。 在這片土地上,人們傳統(tǒng)上使用“:”字符作為文件分隔符,因此JVM盡職盡責(zé)地遵循他們的意愿。
Pointy answered 2019-04-07T18:52:34Z
214 votes
使用用于處理文件的Java庫(kù),您可以在所有平臺(tái)上安全地使用File.separator(斜杠,而不是反斜杠)。 庫(kù)代碼處理內(nèi)部將事物轉(zhuǎn)換為特定于平臺(tái)的路徑。
但是,您可能希望在UI中使用File.separator,因?yàn)樽詈孟蛉藗冋故驹谒麄兊牟僮飨到y(tǒng)中有意義的內(nèi)容,而不是對(duì)Java有意義的內(nèi)容。
更新:在五分鐘的搜索中,我無(wú)法找到記錄下“你總是可以使用斜線”的行為。 現(xiàn)在,我確信我已經(jīng)看到它記錄在案,但由于沒有找到官方參考(因?yàn)槲业挠洃洸煌昝?,我堅(jiān)持使用File.separator,因?yàn)槟阒肋@將有效。
T.J. Crowder answered 2019-04-07T18:52:08Z
26 votes
雖然使用File.separator來引用文件名是過度的(對(duì)于那些想象遠(yuǎn)離陸地的人來說,我想他們的JVM實(shí)現(xiàn)將用:替換/,就像windows jvm用\替換它一樣)。
但是,有時(shí)您獲取文件引用,而不是創(chuàng)建它,并且您需要解析它,并且為了能夠這樣做,您需要知道平臺(tái)上的分隔符。 File.separator可以幫助您實(shí)現(xiàn)這一目標(biāo)。
Yishai answered 2019-04-07T18:53:07Z
7 votes
嗯,有比OS和Windows(便攜式設(shè)備等)更多的操作系統(tǒng),Java以其可移植性而聞名。 最佳實(shí)踐是使用它,因此JVM可以確定哪個(gè)最適合該操作系統(tǒng)。
jpabluz answered 2019-04-07T18:53:32Z
7 votes
雖然它在路上沒有太大的區(qū)別,但它確實(shí)在回來的路上。
當(dāng)然你可以在新文件(字符串路徑)中使用'/'或'\',但File.getPath()只會(huì)給你一個(gè)。
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)
必要時(shí)對(duì)給定的URI路徑字符串進(jìn)行后處理。 這是用來?? win32,例如,將“/ c:/ foo”轉(zhuǎn)換為“c:/ foo”。 路徑字符串?? 還有斜線分離器; File類中的代碼將翻譯它們?? 這個(gè)方法返回后。
這意味著seperatorChar僅在Windows中對(duì)URI路徑進(jìn)行后期處理,因?yàn)樵谙乱恍兄?#xff1a;
p = p.replace('/', File.separatorChar);
它用系統(tǒng)相關(guān)的seperatorChar替換每個(gè)'/',你可以隨時(shí)確保'/'在每個(gè)操作系統(tǒng)中都是安全的。
Alireza Mohamadi answered 2019-04-07T18:55:17Z
3 votes
便攜性簡(jiǎn)單明了。
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");
不起作用。 最后兩個(gè)是等價(jià)的。 所以...我有充分的理由不使用File.separator。
i-make-robots answered 2019-04-07T18:56:44Z
1 votes
“Java SE8 for Programmers”聲稱Java將應(yīng)對(duì)這兩種情況。 (第480頁(yè),最后一段)。該示例聲稱:
c:\Program Files\Java\jdk1.6.0_11\demo/jfc
會(huì)解析得很好。 記下最后一個(gè)(Unix風(fēng)格)分隔符。
它很俗氣,而且可能容易出錯(cuò),但這正是他們(Deitel和Deitel)聲稱的。
我認(rèn)為人們而不是Java的混淆是足夠的理由不使用這個(gè)(誤?)功能。
Erik Bennett answered 2019-04-07T18:57:29Z
1 votes
正如先生們描述了與變體細(xì)節(jié)的區(qū)別。
我想建議在處理程序中的文件時(shí)使用Apache Commons io api,類
E_X answered 2019-04-07T18:58:01Z
0 votes
使用主機(jī)系統(tǒng)的命名約定指定文件或目錄的路徑名。 但是,File類定義了與平臺(tái)相關(guān)的常量,這些常量可用于以獨(dú)立于平臺(tái)的方式處理文件和目錄名稱。
Files.separator定義用于分隔路徑名中的目錄和文件組件的字符或字符串。 對(duì)于Unix,Windows和Macintosh,此分隔符分別為“/”,“\”或“:”。
shubhankar answered 2019-04-07T18:58:37Z
0 votes
如果您使用的是Java 7,請(qǐng)檢查Path.resolve()和Paths.get()。
ceilfors answered 2019-04-07T18:59:02Z
0 votes
使用File.separator使Ubuntu生成文件名為“\”而不是目錄。 也許我對(duì)我如何制作文件(和目錄)很懶,并且可以避免它,無(wú)論如何,每次使用“/”以避免名稱上帶有“\”的文件
Guedez answered 2019-04-07T18:59:28Z
0 votes
如果您嘗試使用Linux分隔符從一些準(zhǔn)備好的路徑(保存在數(shù)據(jù)庫(kù)中,每個(gè)示例)創(chuàng)建一個(gè)文件,我該怎么辦?
也許只需使用路徑創(chuàng)建文件:
new File("/shared/folder/file.jpg");
但Windows使用不同的分隔符(/)。 那么,是否可以將斜杠分隔符轉(zhuǎn)換為平臺(tái)無(wú)關(guān)? 喜歡:
new File(convertPathToPlatformIndependent("/shared/folder"));
這個(gè)方法/可能會(huì)有一些“/”拆分并與File.separator連接。
那么,對(duì)我來說,這對(duì)于一種獨(dú)立于平臺(tái)的語(yǔ)言來說并不好(對(duì)吧?)而且Java已經(jīng)支持在Windows或Linux上使用/。 但是如果你正在使用路徑并且每次都需要記住這個(gè)轉(zhuǎn)換,這將是一場(chǎng)噩夢(mèng),你將不會(huì)對(duì)未來的應(yīng)用程序有任何實(shí)際的好處(可能在@Pointy描述的宇宙中)。
Dherik answered 2019-04-07T19:00:24Z
總結(jié)
以上是生活随笔為你收集整理的java中separator_java - File.separator和路径中的斜杠之间的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 星巴克兼职一小时多少钱?(今年)
- 下一篇: 浪漫爱神甜蜜发换丰收女神长发谁亏?