设计模式开卷考试给的例子代码都是一个类一个java,实在太恶心了,所以写了一个python脚本.

  1. import os
  2. fileansdir=r'C:\Users\tonyson_in_the_rain\Desktop\笔记\JAVA代码\设计模式'

主要用的os库

API总结:

  • files=listdir(path) 显示当前目录的所有文件名和目录名
  • endswith() 选择扩展名
  • windows的路径只需要前面加一个r即可在python程序中使用
  • 把合并的文件在当前目录保存,也可以改成某一目录保存,但是要注意名字

combine函数是一个子过程,可以把dirpath目录下的所有文件合并为一个文件

  1. def combine(dirPath,filename):
  2. files=os.listdir(dirPath)
  3. res=""
  4. i = 0
  5. for file in files:
  6. if file.endswith(".java"):
  7. i+=1
  8. title=file
  9. with open(dirPath+'\\'+file,"r")as file:
  10. content=file.read()
  11. file.close()
  12. res+='\n\n'
  13. res+='#### '+title
  14. res+='\n\n'
  15. res+='```\n'
  16. res+=content
  17. res+='\n```\n'
  18. with open(dirPath+'\\'+filename+'.txt','w')as outFile:
  19. outFile.write(res)
  20. outFile.close()

然后遍历各个文件夹分别跑一遍子过程即可

  1. import os
  2. def EnumPathFiles(path, callback):
  3. ii=0
  4. if not os.path.isdir(path):
  5. print('Error:"',path,'" is not a directory or does not exist.')
  6. return
  7. list_dirs = os.walk(path)
  8. for root, dirs, files in list_dirs:
  9. for d in dirs:
  10. EnumPathFiles(os.path.join(root, d), callback)
  11. dirc=path+'\\'+d
  12. print(dirc)
  13. if(dirc.endswith('memento')):
  14. continue
  15. ii+=1
  16. name=d
  17. combine(dirc,name)
  18. def callback1(path, filename):
  19. print(path+'\\'+filename)
  20. EnumPathFiles(r'C:\Users\tonyson_in_the_rain\Desktop\大三上学习\设计模式\设计模式2018(张欣佳)', callback1)

这里会报一个错误,因为子目录对不上号的原因,不过在这之前有用的目录我们已经跑过了,所以不用管了.

合成的md文件如下:不过是按照类名字典序排的,需要手动调整顺序

Apple.java

  1. public class Apple implements Product
  2. {
  3. public void accept(Visitor visitor)
  4. {
  5. visitor.visit(this);
  6. }
  7. }

Book.java

  1. public class Book implements Product
  2. {
  3. public void accept(Visitor visitor)
  4. {
  5. visitor.visit(this);
  6. }
  7. }

BuyBasket.java

  1. import java.util.*;
  2. public class BuyBasket
  3. {
  4. private ArrayList list=new ArrayList();
  5. public void accept(Visitor visitor)
  6. {
  7. Iterator i=list.iterator();
  8. while(i.hasNext())
  9. {
  10. ((Product)i.next()).accept(visitor);
  11. }
  12. }
  13. public void addProduct(Product product)
  14. {
  15. list.add(product);
  16. }
  17. public void removeProduct(Product product)
  18. {
  19. list.remove(product);
  20. }
  21. }

Client.java

  1. public class Client
  2. {
  3. public static void main(String a[])
  4. {
  5. Product b1=new Book();
  6. Product b2=new Book();
  7. Product a1=new Apple();
  8. Visitor visitor;
  9. BuyBasket basket=new BuyBasket();
  10. basket.addProduct(b1);
  11. basket.addProduct(b2);
  12. basket.addProduct(a1);
  13. visitor=(Visitor)XMLUtil.getBean();
  14. visitor.setName("张三");
  15. basket.accept(visitor);
  16. }
  17. }

Customer.java

  1. public class Customer extends Visitor
  2. {
  3. public void visit(Apple apple)
  4. {
  5. System.out.println("顾客" + name + "选苹果。");
  6. }
  7. public void visit(Book book)
  8. {
  9. System.out.println("顾客" + name + "买书。");
  10. }
  11. }

Product.java

  1. public interface Product
  2. {
  3. void accept(Visitor visitor);
  4. }

Saler.java

  1. public class Saler extends Visitor
  2. {
  3. public void visit(Apple apple)
  4. {
  5. System.out.println("收银员" + name + "给苹果过秤,然后计算其价格。");
  6. }
  7. public void visit(Book book)
  8. {
  9. System.out.println("收银员" + name + "直接计算书的价格。");
  10. }
  11. }

Visitor.java

  1. public abstract class Visitor
  2. {
  3. protected String name;
  4. public void setName(String name)
  5. {
  6. this.name=name;
  7. }
  8. public abstract void visit(Apple apple);
  9. public abstract void visit(Book book);
  10. }

用python将项目中的所有代码(或txt)合并在一个文件中的更多相关文章

  1. 如何在一个文件中写多个Vue组件(译-有删改)

    原文地址 Writing multiple Vue components in a single file 在一个文件中编写多个组件是React的模式,其中一些文件包含多个组件. 走开发过程中,有些组 ...

  2. Linux如何在一个文件中写入内容

    Linux中,在一个文件中写入内容,可以vim打开编辑模式,输入我们想要的内容,此次我们使用echo命令 来在一个文件夹中写入内容. echo命令: 第一种: echo 'i love u' > ...

  3. extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

    extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

  4. pip freeze > requirements.txt` 命令输出文件中出现文件路径而非版本号

    pip freeze > requirements.txt 命令输出文件中出现文件路径而非版本号 解决办法: pip list --format=freeze > requirements ...

  5. Angular项目里Js代码里如何获取Ts文件中的属性数据

    基于之前实现的Angular+ngx-ueditor富文本编辑器做一个简单补充记录,我们在使用Angular开发过程中,难免会使用到调用外部插件Js的应用,但是有的时候又需要在Js文件中调用Ts文件里 ...

  6. 如何将一个Form中的代码拆分到多个文件中

    https://social.msdn.microsoft.com/Forums/en-US/64c77755-b0c1-4447-8ac9-b5a63a681b78/partial-class-fo ...

  7. PE头的应用---插入代码到EXE或DLL文件中

    三.代码实现(DELPHI版本),采用第三种方式实现代码插入. 1. 定义两个类,一个用来实现在内存中建立输入表:一个用来实现对PE头的代码插入. DelphiCode: const MAX_SECT ...

  8. 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法

    这是view中的model代码: @model t_user_info 这是web.config配置文件只的代码: <namespaces> <add namespace=" ...

  9. MFC中 CString类型用fprintf 函数写到文件中乱码的解决办法

    在上一篇中记录了用fprintf函数写内容到文件中的方法,但是发现了问题:产生的文件字符串有乱码现象. 解决办法:用_ftprintf函数 另外,据说: unicode的话要用fwprintf    ...

随机推荐

  1. Factor_Analysis

    Factor_Analysis(因子分析) Factor Analysis 简书:较好理解的解释,其中公式有一定的推导(仅展现关键步骤,细节大多需要自行补充),基本为结论式. 感性层面理解:首先,明确 ...

  2. Flutter移动电商实战 --(52)购物车_数据模型建立和Provide修改

    根据json数据生成模型类 {"goodsId":"2171c20d77c340729d5d7ebc2039c08d","goodsName" ...

  3. python wmi远程数据获取

  4. 问题:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile)

    一:问题 今天编译maven 项目构建失败,提示内容如下: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler ...

  5. [Java复习] MQ

    1. 为什么要用MQ? 解耦,异步,削峰 2. MQ的优点和缺点? 优点: 解耦.异步.削峰 缺点: 1. 系统可用性降低. 外部依赖越多,越容易挂.如果MQ挂了,怎么处理? 2. 系统复杂度提高. ...

  6. Arduino---HC-05 蓝牙模块

    蓝牙基础知识回顾: (一)Arduino和HC-05连接 注意:Arduino通过TX与HC-05进行通信,而Arduino的电压为5V,HC-05的允许电压为3.3V.短时间通信无妨(长时间可能烧毁 ...

  7. Qt编写自定义控件57-直方波形图

    一.前言 直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreato ...

  8. Qt编写自定义控件40-导航进度条

    一.前言 导航进度条控件,其实就是支付宝.京东.淘宝订单页面的进度控件,提示当前第几步,总共有几步,然后当前进度特殊颜色显示,每个进度带有时间文字等信息,本控件特意将三种样式风格都集成进去了,京东订单 ...

  9. CentOS7下配置Tomcat以APR模式+Tomcat Native运行

    在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服务器的 ...

  10. @Qualifier is not applicable for constructor

    问题场景: 笔者在springboot项目中使用java_websocket作为客户端,调用第三方ws服务. 最初只调用一个ws服务,以下代码可以正常工作: @Bean public URI ttsU ...