git 和 java 不区分文件名的大小写

今天遇到一个特别奇怪的事情,往 github 提交代码的时候,显示已经提交成功,没有修改,但是当别人拉取代码后,项目编译不过去。原因是:UI 给的图片命名一开始是有中划线和大写的,当时直接添加到 github 里面去了。但是本地项目编译不过去,所以本地用脚本和手动修改方式,将大批的文件都修改好了。本以为提交上去了,但是没想到 git 忽略了本地的文件名的大小写,虽然本地修改成功了,但是 git 识别不了。

因为工作关系是两台电脑,所以在另外一台电脑也遇到了相同的事情,于是打算用java程序处理。 但是在调试的过程中,发现 file.exist() ,也不区分大小写。

git 的解决办法是:

git config core.ignorecase false

让 git 支持 大小写的识别。

java 的办法是:

不使用 file.exist() 判断,直接 file.rename()。

java 参考代码:

/**
 * FileNameTest
 * Created by WangQing on 2018/1/23.
 */
public class FileNameTest {

    private static final String TAG = "FileNameTest";

    @Test
    public void test_cast() {
//        String path = "/Users/WangQing/Android_Pro/KaiDunPro/app/src/main/res";
        String path = "/Users/WangQing/Desktop/pic";
        dirList(path);
    }

    private void dirList(String path) {
        List list = FileUtils.listFilesInDir(path, true);

        for (File f : list) {

            if (f.isDirectory()) {
                dirList(f.getPath());
                continue;
            }

            String fileName = FileUtils.getFileName(f);

            if (!fileName.toLowerCase().equals(fileName) || fileName.contains("-")) {
                String oldFileName = fileName;

                if (fileName.contains("-")) {
                    fileName = fileName.replaceAll("-", "_");
                }

                String newFileName = fileName.toLowerCase();

                File file = new File(f.getParent() + "/" + newFileName);

                boolean b = f.renameTo(file);

                System.out.println("test_cast: 原来的文件名是:" + oldFileName + ", 新文件名是:" + newFileName + ", rename state:" + b);
            }
        }
    }
}

依赖:

compile 'com.github.ZhuoKeTeam:zhuoke-sdk:1.0.0'

你可能感兴趣的:(git 和 java 不区分文件名的大小写)