2011-03-23 64 views
1

我必須更改文件夾的標題框。基本上,在應用程序啓動時,我想尋找舊的外殼,並重新命名它,如果它仍然存在。所以,在我的測試到目前爲止,機器人忽略了外殼,並報告該文件夾殼,你在發什麼的。所以基本上android檢查文件是否存在區分大小寫?

new File(PATH_WITH_OLD_CASING) == new File(PATH_WITH_NEW_CASING) 

而且似乎也給您發送的絕對路徑,而不考慮報告什麼實際上是在文件系統中命名的。所以

new File(PATH_WITH_OLD_CASING).getAbsolutePath() == PATH_WITH_OLD_CASING; 

new File(PATH_WITH_NEW_CASING).getAbsolutePath() == PATH_WITH_NEW_CASING; 

即使它們指向同一個文件。

所以我很努力想出一種方法來確定舊套管是否仍然存在。我可能在父目錄上做一個listFiles來獲取外殼,但是它的SD卡的根目錄,並不是真的想在應用程序每次啓動時都這樣做(看起來不是一個非常乾淨的解決方案)。

任何想法?

+0

注意大小寫敏感性文件系統,而不是安卓的屬性的屬性。 Android只遵循文件系統驅動程序所說的內容;特別是在FAT/RFS上,filename不區分大小寫,而ext4文件名區分大小寫。如果你需要比文件系統有不同的比較語義,那麼不幸的是你必須親自做比較。另外,在比較Java中的對象時,您應該使用.equals,除非您提供的代碼只是具有誤導性的具體說明性僞代碼。 – 2011-03-23 15:29:48

+0

說明性的僞代碼。 – 2011-03-23 15:36:50

回答

0

UPDATE:一個不完全理想的解決方案,我想出了

if (parentDirectory.listFiles(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     return name.contentEquals(DEPRECATED_FILE_NAME); 
    } 
    }).length > 0){ 
//old file exists 
} 
0

您始終可以將文件名轉換爲字符串值,然後使用toUpper或toLower函數檢查舊文件。這是您解決方案中的一個額外步驟,但可能是完成您嘗試執行的最快方法。

+0

嗯,不知道你在這裏是什麼意思。問題似乎是,我實際上無法從文件系統中獲得保存的區分大小寫的值,所以不知道如何對其進行任何字符串比較。 – 2011-03-23 15:36:01

+0

我的意思是,如果你知道你正在尋找的舊文件名,你可以在理論上將舊值轉換爲全部大寫字母並且以這種方式尋找它。例如:如果KNOWNVALUEINUPPERCASE ==(PATH_WITH_OLD_CASING).getAbsolutePath()。toString.toUpper會爲您提供true/false語句以查看舊文件夾是否存在。但它看起來像你找到了自己的解決方案:) – Sorean 2011-03-23 16:06:51

1

你說目錄在SD卡上,而這很可能是你的問題所在。

默認情況下,SD卡被格式化爲FAT,它保留大小寫但不區分大小寫。

這個meand/sdcard/Hello與/ sdcard/HeLlO相同。

現在,我相信File的行爲並不像你期望的那樣,是因爲它是在傳遞它的路徑名上進行操作,而不是讀取文件系統上存在的內容。即使你打開文件併成功,我仍然不會期望它會更新你給它的路徑,我希望它只是保持一個內部標誌,該文件已成功打開。

你應該使用getCanonicalPath()而非getAbsolutePath():

大多數用戶請使用 getAbsolutePath()代替。典型的 路徑顯然比較昂貴,要計算,並且通常不會有用。 規範化路徑的主要用途是 通過比較 規範化路徑來確定兩個路徑是否指向同一個文件的 。

+0

剛剛測試。看起來像getCanonicalPath行爲方面相同(總是報告你在構造函數中使用的任何東西) – 2011-03-23 15:34:37

+0

有趣的 - 我希望,因爲它解決了鏈接,「。」和「..」目錄,它實際上會走目錄並返回實際的路徑名。不幸的是,深入研究Oracle Java文檔意味着即使getCanonicalPath將盡可能在緩存路徑名上運行。 – RivieraKid 2011-03-23 15:44:51

0

hmm ... 首先嚐試列出目錄。列表目錄的示例代碼是here

之後,將它們與您的文件名進行比較。希望它會工作