解决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 ...
随机推荐
- zabbix service安装配置
1.安装时间同步 yum -y install ntpdate systemctl start ntpdate.service systemctl enable ntpdate.service 2.安 ...
- JQuery实现注册表单验证
效果图如下: 注册页面HTML代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...
- 关于api接口
前阵子一直疯狂的找关于php的api接口方面的资料来学习,总结了一下,无非就是请求数据,然后返回数据,当然也要设置相关安全措施,比如认证口令 等.返回数据格式是json 还是xml 看自己需求咯
- ReentrantLock详解
ReentrantLock概述 ReentrantLock是Lock接口的实现类,可以手动的对某一段进行加锁.ReentrantLock可重入锁,具有可重入性,并且支持可中断锁.其内部对锁的控制有两种 ...
- POJ1985 树的直径(BFS
Cow Marathon Description After hearing about the epidemic of obesity in the USA, Farmer John wants ...
- 最短路径算法 4.SPFA算法(1)
今天所说的就是常用的解决最短路径问题最后一个算法,这个算法同样是求连通图中单源点到其他结点的最短路径,功能和Bellman-Ford算法大致相同,可以求有负权的边的图,但不能出现负回路.但是SPFA算 ...
- Altera Stratix IV 命名规则
由于要开发基于DE4平台的应用,应该要了解一下该平台的芯片情况Stratix IV 具体型号为:Stratix IV EP4SGX230KF40C2 命名规范如下 官网资料为:https://www. ...
- 使用 MySQL 存储 Hue 元数据
1.在 MySQL 中增加数据库 hue 2.编辑 hue.ini 文件 [[database]] # Database engine is typically one of: # postgresq ...
- WPF把CheckBox的文字放到左边,开关在右边
原文:WPF把CheckBox的文字放到左边,开关在右边 效果 实现 这篇文章给了一个不错的参考方案. http://www.codeproject.com/Articles/19141/WPF-Ch ...
- Python的import导入与时间
一.模块与包 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量.一般用module_name. ...