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

 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. Percona-Tookit工具包之pt-online-schema-change

      Preface       As we all know,it's really a troublesome thing to DBA in scenario of changing table ...

  2. Java中replace与replaceAll区别

    看门见山 1.java中replace API: replace(char oldChar, char newChar):寓意为:返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所 ...

  3. Windows下安装最新版的MongoDB

    最近学习爬虫需要用到MongoDB来存储数据,在安装过程遇到了一些坑,在这里总结一些. 安装环境:Windows 10 安装步骤: 1.下载安装文件 下载地址:https://www.mongodb. ...

  4. 中间件kafka

    * kafka----一个发布订阅消息系统,中间件:一个分布式.分区.可重复的日志服务kafka需要了解基础几层结构,生产者订阅者等使用方法,和在高并发.一致性场景使用.(凡事面试问一致性.高并发都脱 ...

  5. 记6种php 加密解密方法

    <?php function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_d ...

  6. thinkphp 3.2中依靠关联模型来关联三个表

    这里说的是用thinkphp3.2关联模型关联三个表 根据用户表查询出三个表的数据,需要两个model来配合,第一个model是根据user表来查询到班级的信息,然后第二个model是根绝banji中 ...

  7. Oracle数据库之 PL SQL 学习笔记

    1.定义基本变量: 2.引用型的变量: set serveroutput on   declare pename emp.ename%type; psal emp.sal%type;   begin ...

  8. jenkins+maven+docker集成java发布(一)自动发布

    JAVA项目持续集成发布 标签(空格分隔): java jenkins 微服务中持续集成自动发布是很重要的一个环节,将不同的模块应用自动部署到一台或者N台服务器中如果采用人工部署的方式不太现实 git ...

  9. flask迁移

    from flask_script import Managerfrom flask_migrate import Migrate, MigrateCommandfrom info import cr ...

  10. Leecode刷题之旅-C语言/python-9.回文数

    /* * @lc app=leetcode.cn id=9 lang=c * * [9] 回文数 * * https://leetcode-cn.com/problems/palindrome-num ...