思路:在每个空文件夹下创建空文件,同步后再删除

 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无法同步空文件夹的问题的更多相关文章

  1. Git上传空文件夹的方法

    之前发现很多项目文件夹下又.gitkeep文件,不知道它的用处. 直到前段时间遇到一个问题,Git如何上传空文件夹? 默认情况下,Git不会上传本地空文件夹,如果有些特殊场合需要的话,一个简单的方法是 ...

  2. git提交空文件夹目录结构

    find . -name ".git" | xargs rm -Rf 在git 目录下执行find . -type d -empty -exec touch {}/.gitigno ...

  3. git提交空文件夹和删除远程文件

    git提交空文件夹 在文件夹中创建 .gitkeep 文件,文件内容如下 # Ignore everything in this directory * # Except this file !.gi ...

  4. Git提交空文件夹的技巧

    这个只能说是技巧不能说是方法,原理是在每个空文件夹新建一个.gitignore文件,然后提交. 快捷命令: find . -type d -empty -exec touch {}/.gitignor ...

  5. tomcat发布项目时,空文件夹未发布成功

    问题背景: 项目发布到服务器时,缺少文件夹,到时向此文件夹写数据时发生错误. 后来经查,缺少这个文件夹,项目部署发布时,并不会把空文件夹发布上去 解决: 1.在空文件中加入,一个文件.就可以发布成功 ...

  6. Windows删除空文件夹问题带来的学习与思考

    https://blog.csdn.net/XavierDarkness/article/details/84785482 1.问题产生:   前段时间得到一份资源,号称有近500个G的学习资料,花了 ...

  7. 删除空文件夹 清除CS扩展名文件 bat

    删除空文件夹.删的干净.删的彻底. 将下列代码复制到txt中保存.并把后缀.txt命成.bat.然后运行即可. 方案1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  8. linux_inux中find批量删除空文件及空文件夹脚本

    1.{}和之间有一个空格 2.find . -name 之间也有空格 3.exec 是一个后续的命令,{}内的内容代表前面查找出来的文件 linux下批量删除空文件(大小等于0的文件)的方法 rm - ...

  9. python实现删除空文件夹 附源代码

    前言:空文件夹虽然不占空间,但是有时候看着确实挺烦的(别误会,我不是强迫症!),所以写了一个用于删除当前目录下的空文件夹的小程序 环境:win7 64位:python2.7:IDE pycharm20 ...

随机推荐

  1. sudo及visudo

    sudo是一种权限管理机制,管理员可以授权普通用户去执行root的操作,而不需要知道root的密码,它依赖于/etc/sudoers这个文件,可以授权给哪个用户在哪个主机上能够以管理员的身份执行什么样 ...

  2. JavaScript--Dom操作元素的样式

    在前端开发中,有时候需要动态修改的网页元素的样式,这里将使用JS动态修改元素样式的方法做个小结: 网页结构: 按钮: 标签:input    类型:button     id:btn          ...

  3. python的元组数据类型及常用操作

    Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 如下实例: tup1 = ('physi ...

  4. ES6、7、8、9新语法新特性

    前言 如果你擅长这种扩散式学习方式,不妨再进一步温习一下整个 ES6 引入的新特性,笔者强烈推荐阮一峰老师的 ECMAScript 6 入门 一书. ES2018 引入的特性还太新,单在对 ES6 特 ...

  5. docker API 配置与使用

    在网上看到一大堆乱乱七八招的博客,很多都不能用,我根据这些天踩的坑来总结一下吧 首先!怎么配置 docker API 两种方法 在/etc/sysconfig/docker文件里加一行OPTIONS= ...

  6. I/O流、ZIP文档

    1) ZIP文档通常以压缩格式存储一个或多个文档.在Java中可以用ZipInputStream读入ZIP文档(即解压文件流),用ZipOutputStream写入ZIP文档(即压缩文件流),无论解压 ...

  7. laravel构造函数跳转失败

    <?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Requests;us ...

  8. flask的自定义过滤器

    过滤器的本质是函数.当模板内置的过滤器不能满足需求,可以自定义过滤器.自定义过滤器有两种实现方式: 一种是通过Flask应用对象的 add_template_filter 方法 通过装饰器来实现自定义 ...

  9. python学习之路2(程序的控制结构)

    1.程序的分支结构 1.1 单分支 if <条件>:                       例:guess = eval(input()) <语句块>          ...

  10. python网络编程的坑(持续更新)

    初学python,踩了许多坑...每天都学一点吧..(大佬绕过) 1.session的用法: session是python requests库中的一个重要功能.session可以存储用户的数据并且存储 ...