1 import java.io.*;
2 import java.util.*;
3
4 /**
5 * Created by Administrator on 2017/6/12.
6 */
7 public class PatchTool {
8
9 //1.读取配置文件
10
11 //2.在配置文件中配置本地文件路径前缀
12
13 //3.读取文件路径列表
14
15 //4.在输出文件夹生成相应的文件夹结构
16
17 public static final String CONFIG_PATH = "patch.properties";
18
19 public static final String KEY_WORKSPACE_PATH = "WORKSPACE_PATH";
20
21 public static final String KEY_OUTPUT_PATH = "OUTPUT_PATH";
22
23 public static final String FILE_LIST_NAME = "list.txt";//存放修改过的文件的全路径列表文件
24 /**
25 * 1.读取配置文件
26 */
27 public static Map<String,String> getProperties() {
28 Properties p = new Properties();
29 Map<String,String> config = null;
30 try {
31 p.load(new BufferedInputStream(new FileInputStream(new File(CONFIG_PATH))));
32 String workSpacePath = p.getProperty(KEY_WORKSPACE_PATH);
33 String outputPath = p.getProperty(KEY_OUTPUT_PATH);
34 config = new HashMap<>();
35 config.put(KEY_OUTPUT_PATH,outputPath);
36 config.put(KEY_WORKSPACE_PATH,workSpacePath);
37 } catch (IOException e) {
38 e.printStackTrace();
39 }
40 return config;
41 }
42
43 // 3.读取文件路径列表
44 public static Set<String> getFilePaths(){
45 Set<String> fileSets = null;
46 try {
47 BufferedReader br = new BufferedReader(new FileReader(new File(FILE_LIST_NAME)));
48 fileSets = new HashSet<>();
49 String tmp;
50 while((tmp = br.readLine())!= null){
51 fileSets.add(tmp);
52 }
53 br.close();
54 } catch (FileNotFoundException e) {
55 e.printStackTrace();
56 } catch (IOException e) {
57 e.printStackTrace();
58 }
59 return fileSets;
60 }
61
62 // 4.根据文件路径生成文件夹结构
63 public static boolean createDir(Map<String,String> config,Set<String> fileSets){
64
65 String workSpacePath = config.get(KEY_WORKSPACE_PATH);
66 String outputPath = config.get(KEY_OUTPUT_PATH);
67
68 String pathName,fileName,targetFile;
69 //遍历文件列表
70 for(String file : fileSets){
71 pathName = outputPath + File.separator + file.substring(0,file.lastIndexOf(File.separator) + 1);
72 fileName = workSpacePath + File.separator + file;
73 targetFile = outputPath + File.separator + file;
74
75 File fileDir = new File(pathName);
76 File f;
77 if(!fileDir.exists()){
78 fileDir.mkdirs();
79 f = new File(targetFile);
80 if(!f.exists()){
81 copyFile(fileName,targetFile);
82 }
83 }
84
85 }
86
87
88 return true;
89 }
90
91 public static void copyFile(String oldPath, String newPath) {
92 try {
93 int bytesum = 0;
94 int byteread = 0;
95 File oldfile = new File(oldPath);
96 if (oldfile.exists()) { //文件存在时
97 InputStream inStream = new FileInputStream(oldPath); //读入原文件
98 FileOutputStream fs = new FileOutputStream(newPath);
99 byte[] buffer = new byte[1444];
100 int length;
101 while ( (byteread = inStream.read(buffer)) != -1) {
102 bytesum += byteread; //字节数 文件大小
103 System.out.println(bytesum);
104 fs.write(buffer, 0, byteread);
105 }
106 inStream.close();
107 }
108 }
109 catch (Exception e) {
110 System.out.println("复制单个文件操作出错");
111 e.printStackTrace();
112
113 }
114
115 }
116
117 public static void main(String[] args) throws IOException{
118
119
120 /* File f = new File("a.txt");
121 f.createNewFile();*/
122
123 Map<String,String> config = getProperties();
124 Set<String> fileSets = getFilePaths();
125
126 createDir(config,fileSets);
127
128 }
129 }