解决Git无法同步空文件夹的问题
思路:在每个空文件夹下创建空文件,同步后再删除
package org.zln.module1.demo1; import org.apache.log4j.Logger; import java.io.File;
import java.io.IOException; /**
* Created by coolkid on 2015/6/12 0012.
*/
public class CreateFileInEmptyDir {
protected static Logger logger = Logger.getLogger(CreateFileInEmptyDir.class); private static final String createFlag = "create";
private static final String fillFileName = "填充文件.txt"; public static void main(String[] args) throws IOException {
String rootDir;
String delFlag;
if (null == args||args.length != 2){
throw new RuntimeException("输入参数个数不正确");
}else {
rootDir = args[0];
delFlag = args[1];
}
logger.debug("对目录:"+rootDir+" 进行"+(createFlag.equals(delFlag)?"创建":"删除"));
File rootFile = new File(rootDir);
if (createFlag.equals(delFlag)){//默认创建
createFileInEmptyDir(rootFile);
}else {//删除
deleteFillFile(rootFile);
}
} /**
* 在跟路径下,遍历所有的目录,如果该目录为空,则创建一个文件
* @param rootFile 根目录文件
*/
private static void createFileInEmptyDir(File rootFile) throws IOException {
if (rootFile.isDirectory()){
File[] listFiles = rootFile.listFiles();
if (0 == listFiles.length){
createTxtFile(rootFile,fillFileName);
logger.debug(rootFile.getAbsolutePath()+"\t为空目录,创建填充文件"); }else {
for (int i = 0; i < listFiles.length; i++) {
createFileInEmptyDir(listFiles[i]);
}
}
}
} private static void createTxtFile(File rootFile,String fileName) throws IOException {
File newFile = new File(rootFile,fileName);
newFile.createNewFile();
} /**
* 删除指定目录下的填充文件
* @param root
*/
private static void deleteFillFile(File root){
if (root.isDirectory()){//是目录
File[] files = root.listFiles();
for (File tempFile:files){
deleteFillFile(tempFile);
}
}else {//是文件
String fileName = root.getName();
if (fillFileName.equals(fileName)){
logger.debug("删除:"+root.getAbsolutePath());
root.delete();
}
}
}
}
依赖jar包

执行脚本:
#进入执行目录 - 程序根目录
cd E:\GitHub\tools\JavaEEDevelop\out\production\Lesson1_JavaSe_Demo1 #设置class路径
set CLASSSERVER_HOME=E:\GitHub\tools\JavaEEDevelop\GlobalLib set CLASSPATH=. set CLASSPATH=%CLASSPATH%;%CLASSSERVER_HOME%\log4j\log4j-1.2.17.jar set CLASSPATH=%CLASSPATH%;%CLASSSERVER_HOME%\log4j\log4j-api-2.2.jar set CLASSPATH=%CLASSPATH%;%CLASSSERVER_HOME%\log4j\log4j-core-2.2.jar #根据需求执行指令
#对指定目录及其子目录的空文件夹创建空文件
java org.zln.module1.demo1.CreateFileInEmptyDir E:\GitHub\tools\JavaEEDevelop create
#删除创建的空文件
java org.zln.module1.demo1.CreateFileInEmptyDir E:\GitHub\tools\JavaEEDevelop delete
日志配置:
#
# Log4J Settings for log4j 1.2.x (via jakarta-commons-logging)
#
# The five logging levels used by Log are (in order):
#
# 1. DEBUG (the least serious)
# 2. INFO
# 3. WARN
# 4. ERROR
# 5. FATAL (the most serious) # Set root logger level to WARN and append to stdout
log4j.rootLogger=DEBUG, stdout,FILE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n #输出到文件
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.Append=true
log4j.appender.FILE.File=D:\\log\\Lesson1_JavaSe_Demo1.log
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n
log4j.appender.FILE.MaxFileSize=10MB # Print only messages of level ERROR or above in the package noModule.
log4j.logger.noModule=FATAL # OpenSymphony Stuff
log4j.logger.freemarker=INFO
log4j.logger.com.opensymphony=INFO
log4j.logger.com.opensymphony.xwork2.ognl=ERROR
log4j.logger.org.apache.struts2=WARN
log4j.logger.org.apache.struts2.components=WARN
log4j.logger.org.apache.struts2.dispatcher=WARN
log4j.logger.org.apache.struts2.convention=INFO # Spring Stuff
log4j.logger.org.springframework=WARN
优化:创建与删除可以同时进行
添加一个方法
/**
* 创建或删除空文件在指定路径及其子路径下
* @param rootFile 根路径
*/
private static void createOrDeleteFile(File rootFile) throws IOException {
if (rootFile.isDirectory()){
File[] listFiles = rootFile.listFiles();
if (0 == listFiles.length){
createTxtFile(rootFile,fillFileName);
logger.debug(rootFile.getAbsolutePath()+"\t为空目录,创建填充文件");
}else if (1 < listFiles.length){
for (File temp:listFiles){
if (temp.isDirectory()){
createOrDeleteFile(temp);
}else {
if (fillFileName.equals(temp.getName())){
logger.debug("填充文件失效,删除:"+temp.getAbsolutePath());
temp.delete();
}
}
}
}
}
}
解决Git无法同步空文件夹的问题的更多相关文章
- Git上传空文件夹的方法
之前发现很多项目文件夹下又.gitkeep文件,不知道它的用处. 直到前段时间遇到一个问题,Git如何上传空文件夹? 默认情况下,Git不会上传本地空文件夹,如果有些特殊场合需要的话,一个简单的方法是 ...
- git提交空文件夹目录结构
find . -name ".git" | xargs rm -Rf 在git 目录下执行find . -type d -empty -exec touch {}/.gitigno ...
- git提交空文件夹和删除远程文件
git提交空文件夹 在文件夹中创建 .gitkeep 文件,文件内容如下 # Ignore everything in this directory * # Except this file !.gi ...
- Git提交空文件夹的技巧
这个只能说是技巧不能说是方法,原理是在每个空文件夹新建一个.gitignore文件,然后提交. 快捷命令: find . -type d -empty -exec touch {}/.gitignor ...
- tomcat发布项目时,空文件夹未发布成功
问题背景: 项目发布到服务器时,缺少文件夹,到时向此文件夹写数据时发生错误. 后来经查,缺少这个文件夹,项目部署发布时,并不会把空文件夹发布上去 解决: 1.在空文件中加入,一个文件.就可以发布成功 ...
- Windows删除空文件夹问题带来的学习与思考
https://blog.csdn.net/XavierDarkness/article/details/84785482 1.问题产生: 前段时间得到一份资源,号称有近500个G的学习资料,花了 ...
- 删除空文件夹 清除CS扩展名文件 bat
删除空文件夹.删的干净.删的彻底. 将下列代码复制到txt中保存.并把后缀.txt命成.bat.然后运行即可. 方案1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- linux_inux中find批量删除空文件及空文件夹脚本
1.{}和之间有一个空格 2.find . -name 之间也有空格 3.exec 是一个后续的命令,{}内的内容代表前面查找出来的文件 linux下批量删除空文件(大小等于0的文件)的方法 rm - ...
- python实现删除空文件夹 附源代码
前言:空文件夹虽然不占空间,但是有时候看着确实挺烦的(别误会,我不是强迫症!),所以写了一个用于删除当前目录下的空文件夹的小程序 环境:win7 64位:python2.7:IDE pycharm20 ...
随机推荐
- 最大的最大公约数( 51nod-1179)
妈耶有日期显示啊,我还写什么... 给出N个正整数,找出N个数两两之间最大公约数的最大值. 例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5. ...
- ABAP术语-Customer Enhancement
Customer Enhancement 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/18/1043874.html Adjustment ...
- Zabbix 3.x中使用Percona Monitoring Plugins监控MySQL
1.下载安装percona-zabbix-templates-1.1.7-2.noarch.rpm 下载地址:https://www.percona.com/downloads/percona-mon ...
- 学习photoshop心得
简要的学习了ps的三大功能p图,抠图,作图, p图主要是学了换脸这一效果,用到套索工具,把范冰冰的脸接到郭德纲身上, 首先使用套索工具把脸圈起来 然后移动到 另一个人脸上 再然后混合图层,自动混合 差 ...
- 前端学习之HTML基础
要点: 理解HTTP请求响应模式及通信规范 HTML的各种标签和常用标签 CSS是用于样式渲染和定位布局 JS将HTML动态化 jquery是JS的高级封装 理解HTTP请求响应模式及通信规范 HTT ...
- powerpoint教程资料,PPT的
Powerpoint,是微软公司设计的演示文稿软件,利用Powerpoint不仅可以创建演示文稿,还可以在互联网上召开面对面会议.远程会议或在网上给观众展示演示文稿,掌握利用PowerPoint是一项 ...
- LocalDate相关方法
getYear() int 获取当前日期的年份 getMonth() Month 获取当前日期的月份对象 getMonthValue() int 获取当前日期是第几月 getDayOfWeek() D ...
- Linux mysql启动与关闭
service mysql stop service mysqld start
- 二叉树和二叉查找树--数据结构与算法JavaScript描述(10)
二叉树和二叉查找树 概念 树是一种非线性的数据结构,以分层的方式存储数据. 树被用来存储具有层级关系的数据,比如文件系统的文件: 树还被用来存储有序列表. 一棵树最上面的节点称为根节点. 如果一个节点 ...
- 【財務会計】BS科目とは・PL科目とは
「BS科目」「PL科目」という言葉がありますが.聞いたことあるけどよくわからん!っていう人は多いと思います.なので.簡単にご説明を. BS科目は「いくらあるか」 「BS科目」は.「B/S科目」と書くこ ...