2011-01-30 27 views
4

我必須根據提供給我的字符串創建文件。 對於這個例子,假設文件名是「我的文件w/stuff.txt」。 當Java的創建使用Windows上的Java:防止文件名中的'/'斜槓作爲分隔符

File file = new File("My file w/ stuff.txt") 

即使默認窗口分隔爲'\'文件,它假定'/'斜線是文件分隔符。因此,未來呼叫file.getName()將返回" stuff.txt"。這會導致我的程序出現問題。

有什麼辦法可以防止這種行爲?

+0

你可能不應該在文件名中使用`/`s。你可以逃脫它File file = new File(「My file w \/stuff.txt」) – Falmarri 2011-01-30 22:12:03

+0

這是行不通的。它甚至不會編譯,因爲正斜槓不需要被轉義。它可以從字面上表示。 – bradvido 2011-01-30 22:16:09

回答

6

根據this Wikipedia page,Windows API將'/'視爲等同於'\'。所以,即使你以某種方式設法在一個路徑名組件中嵌入'/'(例如)一個File對象,Windows有可能會將其視爲一個路徑分隔符。

所以,你最好的選擇是:

  • 讓Windows對待 '/',因爲它通常會;即讓它將字符視爲路徑名分隔符。
  • 如上所述,但會向用戶發出有關'/'的警告。
  • 檢查'/'和'\'字符,並拒絕兩個都說文件名(即路徑名組件)不能包含路徑名分隔符。

(最好的最好的取決於你的應用程序的細節;比如,你是否能問題報告給誰進入僞造的文件名的人。)

如果試圖從治療「/」不同' ',你冒着創造比你解決的問題更多的風險;例如如果你的應用程序需要腳本。如果你悄悄剝去一個或兩個角色(或將它們變成其他角色),那麼存在一個風險,那就是你會製造更多的問題;例如意外的路徑名衝突。 (我最初建議在具有%轉義的'/'字符的「file:」URL上使用File(URL)構造函數,但即使這在Java端工作,它也不能在Windows端工作)。

0

如果(從外部來源)向您提供了一個字符串,聽起來不像您可以阻止該字符串包含某些字符。如果你有某種圖形用戶界面來創建字符串,那麼你總是可以限制它。否則,無論創建文件的方法是什麼,都應該檢查斜線,並返回錯誤或根據需要處理。

0

由於在Windows文件名中不允許使用向前或向後的斜槓,因此應該將它們從用於命名文件的字符串中清除。

0

那麼,你怎麼能阻止它是一個文件夾分隔符?這是一個folder separator。如果你可以自己決定什麼是和什麼不是文件夾分隔符,那麼整個系統就會崩潰。

相關問題