背景: 新老系统数据对接,需要把老系统的附件放到新系统中,新系统的表结构和文件的存储位置与老系统都不同,存储方式也不一样。老系统是按月份存储了所有附件,并且文件是 id . 文件类型(id 是这个附件在表中记录的 id)。在新系统中,所有附件是放在了同一个文件夹,文件是 附件名称-时间戳 . 文件类型。
任务: 把附件命名规则改成新系统的规则,并且需要把同一个项目的附件放到同一个文件夹中,该文件夹的名称为项目名称。
解决步骤:
用到的 jar 包:fastjson-1.2.62.jar
1)把项目与附件的关系整理出来,调整格式,形成如下文件。
- path:附件在老系统的位置
- proname:项目名称
- fileName:附件名称
2)写转换程序
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class Test {
public static void main(String[] args) {
String path = Test.class.getClassLoader().getResource("oldfiles.json").getPath();
String s = readJsonFile(path);
JSONObject allfiles = JSON.parseObject(s);
JSONArray links = allfiles.getJSONArray("alldata");
for (int i = 0 ; i < links.size();i++){
JSONObject datakey = (JSONObject)links.get(i);
String filepath = (String)datakey.get("path");
String proname = (String)datakey.get("proname");
String fileName = (String)datakey.get("fileName");
System.out.println(filepath);
System.out.println(proname);
System.out.println(fileName);
renameFile(proname, filepath, fileName);
}
System.out.println("------------over------------");
}
// 移动文件并更改文件名称
public static void renameFile(String proname, String path, String fileName) {
String dirName = "E:/newattachs/" + proname;
File dir = new File(dirName);
if(!dir.exists()) {
//如果该项目名称文件夹未创建,则创建
dir.mkdir();
System.out.println(dirName + "创建成功--------");
}
//获取旧文件
File file = new File(path);
String newFilename = "E:/newattachs/" + proname + "/" + fileName;
file.renameTo(new File(newFilename));
}
// 读取json文件,返回json串
public static String readJsonFile(String fileName) {
String jsonStr = "";
try {
File jsonFile = new File(fileName);
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
3)确保 newattachs 文件夹已创建,执行这个 main 方法即可
大致步骤就这些了,具体的细节可灵活修改
如果朋友有更好的想法、更好的实现方式,还请留言指教