日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java中separator_java - File.separator和路径中的斜杠之间的区别

發(fā)布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中separator_java - File.separator和路径中的斜杠之间的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。