android 文件存儲對文件名大小寫不敏感


1、開發中發現,當兩個文件名只有大小寫的區別,其他都一樣的情況,android中會默認是同一個文件。

       比如,你在同一個文件夾下有一個文件 aa.txt   重新創建一個文件命名為AA.txt  android系統會認為這倆是同一個文件,從而出現覆蓋的問題。

       經測試發現,windows、Mac osx 系統也是這樣的。

2、項目中遇到的問題是。創建文檔時防止文件重名導致的覆蓋問題。使用 file.exist()方法來判斷文件是否存在,經測試發現:

       存儲路徑時sd卡時,該方法不區分大小寫,但是路徑在data/目錄下時,改方法區分大小寫。  但是只是該方法區分大小寫,實際存入data/目錄下的文件名系統還是不區分大小寫,所以當文件路徑是data/時,就不能使用此方法判斷文件是否存在。

       

如果你有兩個文件,/sdcard/file (在 SD卡)和 /data/file (在內部文件系統), 你會得到以下結果:
new File("/sdcard/file").exists(); // true
new File("/sdcard/FILE").exists(); // true, /sdcard是一個不區分大小寫的文件系統 
new File("/data/file").exists(); // true
new File("/data/FILE").exists(); // false, /數據是區分大小寫的文件系統
//從數據庫讀出該文件夾下的所有文件,然后把名稱轉換成小寫存入集合,把用戶數據的文件名字也轉為小寫,然后進行判斷重名。
mModel.loadFiles(FixedFolderHelper.DOCUMENTFOLDER, new CallBack<ArrayList<Files>>() {
            @Override
            public void onSuccess(ArrayList<Files> datas) {
                ArrayList<String> names = new ArrayList<>();
                for (Files file : datas) {
                    String fileName = file.getFileName();
                    names.add(fileName.toLowerCase());
                }
                String newName_1 = newName + Constant.MYDOCUSUFFIX;
                if (!names.contains(newName_1.toLowerCase())) {
                    String filePath = FixedFolderHelper.DOCUMENTFOLDER + "/" + newName_1;
                    saveFile(filePath, inputText);

                } else {
                    mView.showToast("文件名已存在");
                }
                
                //當存儲路徑為sd卡時使用此方法比較簡潔,但如果存儲路徑是data/目錄下時,需要使用上面的方法判斷。
//String newName_1 = newName + Constant.MYDOCUSUFFIX;
//        String filePath = FixedFolderHelper.DOCUMENTFOLDER + "/" + newName_1;
//        File file = new File(filePath);
//        if (!file.exists()) {//存儲路徑是在sd卡時,可以使用此方法。
//        saveFile(filePath, inputText);
//        } else {
//        mView.showToast("文件名已存在");
//
//        }

            }

            @Override
            public void onFailed(String errorDetail) {

            }
        });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM