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

 1 package org.zln.module1.demo1;
 2
 3 import org.apache.log4j.Logger;
 4
 5 import java.io.File;
 6 import java.io.IOException;
 7
 8 /**
 9  * Created by coolkid on 2015/6/12 0012.
10  */
11 public class CreateFileInEmptyDir {
12     protected static Logger logger = Logger.getLogger(CreateFileInEmptyDir.class);
13
14     private static final String createFlag = "create";
15     private static final String fillFileName = "填充文件.txt";
16
17     public static void main(String[] args) throws IOException {
18         String rootDir;
19         String delFlag;
20         if (null == args||args.length != 2){
21             throw new RuntimeException("输入参数个数不正确");
22         }else {
23             rootDir = args[0];
24             delFlag = args[1];
25         }
26         logger.debug("对目录:"+rootDir+" 进行"+(createFlag.equals(delFlag)?"创建":"删除"));
27         File rootFile = new File(rootDir);
28         if (createFlag.equals(delFlag)){//默认创建
29             createFileInEmptyDir(rootFile);
30         }else {//删除
31             deleteFillFile(rootFile);
32         }
33     }
34
35     /**
36      * 在跟路径下,遍历所有的目录,如果该目录为空,则创建一个文件
37      * @param rootFile 根目录文件
38      */
39     private static void createFileInEmptyDir(File rootFile) throws IOException {
40         if (rootFile.isDirectory()){
41             File[] listFiles = rootFile.listFiles();
42             if (0 == listFiles.length){
43                 createTxtFile(rootFile,fillFileName);
44                 logger.debug(rootFile.getAbsolutePath()+"\t为空目录,创建填充文件");
45
46             }else {
47                 for (int i = 0; i < listFiles.length; i++) {
48                     createFileInEmptyDir(listFiles[i]);
49                 }
50             }
51         }
52     }
53
54     private static void createTxtFile(File rootFile,String fileName) throws IOException {
55         File newFile = new File(rootFile,fileName);
56         newFile.createNewFile();
57     }
58
59     /**
60      * 删除指定目录下的填充文件
61      * @param root
62      */
63     private static void deleteFillFile(File root){
64         if (root.isDirectory()){//是目录
65             File[] files = root.listFiles();
66             for (File tempFile:files){
67                 deleteFillFile(tempFile);
68             }
69         }else {//是文件
70             String fileName = root.getName();
71             if (fillFileName.equals(fileName)){
72                 logger.debug("删除:"+root.getAbsolutePath());
73                 root.delete();
74             }
75         }
76     }
77 }

依赖jar包

执行脚本:

#进入执行目录 - 程序根目录
cd E:\GitHub\tools\JavaEEDevelop\out\production\Lesson1_JavaSe_Demo1#设置class路径
set CLASSSERVER_HOME=E:\GitHub\tools\JavaEEDevelop\GlobalLibset CLASSPATH=.set CLASSPATH=%CLASSPATH%;%CLASSSERVER_HOME%\log4j\log4j-1.2.17.jarset CLASSPATH=%CLASSPATH%;%CLASSSERVER_HOME%\log4j\log4j-api-2.2.jarset 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

优化:创建与删除可以同时进行

添加一个方法

 1 /**
 2      * 创建或删除空文件在指定路径及其子路径下
 3      * @param rootFile 根路径
 4      */
 5     private static void createOrDeleteFile(File rootFile) throws IOException {
 6         if (rootFile.isDirectory()){
 7             File[] listFiles = rootFile.listFiles();
 8             if (0 == listFiles.length){
 9                 createTxtFile(rootFile,fillFileName);
10                 logger.debug(rootFile.getAbsolutePath()+"\t为空目录,创建填充文件");
11             }else if (1 < listFiles.length){
12                 for (File temp:listFiles){
13                     if (temp.isDirectory()){
14                         createOrDeleteFile(temp);
15                     }else {
16                         if (fillFileName.equals(temp.getName())){
17                             logger.debug("填充文件失效,删除:"+temp.getAbsolutePath());
18                             temp.delete();
19                         }
20                     }
21                 }
22             }
23         }
24     }

转载于:https://www.cnblogs.com/sherrykid/p/4572625.html

解决Git无法同步空文件夹的问题相关推荐

  1. java压缩文件夹(含有空文件夹)

    两种实现方式: java.util.zip.ZipOutputStream org.apache.tools.ant 注意 最初采用java.util.zip.ZipOutputStream的方式, ...

  2. 服务器空文件夹无法删除怎么办,空的文件夹无法删除怎么办 空的文件夹无法删除的原因【图文】...

    电脑已经不是人们生活中所陌生的产品,现在人们的娱乐.办公都会用到电脑,而在电脑被越发使用频繁的当下,出现的问题相对来说就越多了.很多时候这些小问题,却使得人们在使用电脑的过程中碰到大难题.就好比空的文 ...

  3. shell空文件夹查找

    使用git维护代码或者文件时,git默认是不上传空文件夹的,如果是用git托管文件系统,可能就会导致好多空文件夹漏传,可以通过以下shell脚本来查找到当前目录下的所有空文件夹,并在文件夹里创建一个隐 ...

  4. Unity中用递归删除空文件夹和文件夹下面的子文件,meta文件保留和IO的一些操作总结

    /*----------------------------------------------------------------Created by 王银文件名: FilesTools创建时间: ...

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

    1.问题产生:   前段时间得到一份资源,号称有近500个G的学习资料,花了我好长时间下载下来,顺手拿了个文件查重工具查了下,发现这500个G水分很大,资料重复率很高,于是当然就会查重删除重复文件,这 ...

  6. 空文件夹、重复文件夹清理,电脑优化、异常修复

    哈喽~这里是小宝库. 今天原本想发一个清理空文件夹的小工具来着,然后使用效果不太理想.然后小编找啊找,找到一个好朋友...不是,找到一个非常全面的Windows电脑优化工具. 除了可以快速智能的对电脑 ...

  7. 删除空文件夹 linux,Linux中find批量删除空文件及空文件夹脚本

    Linux中find批量删除空文件及空文件夹脚本 linux下批量删除空文件(大小等于0的文件)的方法 代码如下 复制代码 find . -name "" -type f -siz ...

  8. Python 技术篇-用os库实现删除本地文件、非空文件夹方法,python判断本地文件、文件夹是否存在方法

    os.remove() 就是删除文件的 os.removedirs() 就是删除文件夹的 os.path.exists() 用来判断文件或文件夹是否存在 import ospath = "D ...

  9. 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突

    用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突              这几天一直由于之前的的项目实现的功能没有提交,git客户端我用的是smartGit,然后 ...

最新文章

  1. 为什么“不懂数据结构与算法”的程序员一定走不远?
  2. 解决 python用 xlsxwrite 向excel 中写入中文字符串变量 报错
  3. React Native Android启动白屏的一种解决方案上
  4. mysql修改binlog格式_mysql binlog格式...
  5. clover写入efi_2014 黑苹果折腾之clover efi全新安装
  6. 《重构-改善既有代码设计》读书笔记-重构篇
  7. Django之ORM使用以及模板语言
  8. 职场中一路走来却拂不去一丝失落——一个女IT的告白
  9. python非数值型数据_Python机器学习实战:如何处理非数值特征
  10. pip install mysql-connector 安装出错
  11. windows下apache并发php,windows环境下apache死机问题的解决一例
  12. 苹果CMSv10_全站伪静态规则教程_宝塔Linux系统
  13. springboot之整合mybatis
  14. 阿里B2B技术架构演进详解 一篇创业者必须收藏的文章
  15. ubuntu16.04安装配置mysql数据库,分割视频为帧图像
  16. 视频监控安防平台-GB35114和GB28181的注册信令
  17. eova1.4版本下拉框没有滚动条
  18. PLSQL Developer解决科学计数法
  19. 通过Dockerfile创建docker镜像
  20. 批量探测主机是否存活

热门文章

  1. [在今天的历史]他们终于要对我下毒手了
  2. select下拉框如何触发函数并传递参数
  3. java限制一个接口的执行时间_Java 并发编程:任务执行器 Executor 接口
  4. Python使用for循环打印金字塔
  5. java 创建存储过程_如何在pl/sql中创建及调用JAVA存储过程 | 学步园
  6. mock介绍及moco框架搭建使用
  7. python第三方库介绍和安装
  8. SAP License:SAP ECC6安装系列四:安装过程详解
  9. SAP License:SAP ECC6安装系列三:关于SAP你也许想知道的一些事
  10. 接到有用数据的5个做法,让你不再头疼