一、文件内容创建(Java后台创建并写入内容)
功能实现:项目中通过前台传递过来的脚本类型及脚本内容,创建脚本文件,并将文件的基本信息存储到数据库。
系统框架:SSM
1、前台表单字段(FORM表单提交自行实现)
脚本名称、脚本类型(shell、python、bat等)、脚本内容(通过前端编辑器插件编写)
2、文件内容创建(重点内容)
//文件路径
public static String getFilePath() throws IOException {
Properties prop = new Properties();
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("XXX.properties"));
String FILEPATH = prop.getProperty("FilePath");
return FILEPATH;
}
/**
* 创建文件
* @param fileName 文件名称
* @param fileType 文件类型
* @param filecontent 文件内容
* @return 是否创建成功,成功则返回true
* @throws IOException
*/
public static PageData createFile(String fileName,String fileType,String filecontent) throws IOException{
String fileSize;
PageData pd=new PageData();
String fileTypes;// 脚本类型:0|shell;1|bat;2|python;3|其他(txt)
if(fileType.equals("0")) {
fileTypes=".sh";
}else if(fileType.equals("1")) {
fileTypes=".bat";
}else if(fileType.equals("2")) {
fileTypes=".py";
}else {
fileTypes=".txt";
}
String fileNames = fileName+fileTypes;//名称+文件类型
String file_path_name=getFilePath()+fileNames;// 文件路径+名称+文件类型
File filePath = new File(getFilePath());
File contentFile = new File(file_path_name);
try {
//如果文件夹不存在,则创建新的文件夹
if(!filePath.exists()) {
filePath.mkdirs();
}
//如果文件不存在,则创建新的文件
if(!contentFile.exists()){
contentFile.createNewFile();
}
boolean bool = writeFileContent(file_path_name, filecontent);//创建文件成功后,写入内容到文件里
if(bool) {
fileSize=String.valueOf(file_path_name.length());
pd.put("FILENAME", fileNames);
pd.put("FILEPATH", file_path_name);
pd.put("FILESIZE", fileSize);
};
} catch (Exception e) {
e.printStackTrace();
}
return pd;
}
说明:
(1)参数拼装;【文件路径使用文件配置,文件类型根据前台传递的脚本类型进行判断】
(2)判断文件夹及文件是否存在,不存在则新建;
(3)调用writeFileContent方法,将内容以流的形式写入文件;
(4)【注】文件大小,采用file.length()方法获取。
二、文件内容修改(文件读取)
功能实现:(接上)脚本内容需要修改时,数据库查询记录的文件路径,读取文件内容,并以字符串的形式返回至前端。
/**
* 获取文件内容
* @throws Exception
*/
public String getFileContent(PageData pd) throws Exception{
PageData filePd=findById(pd);
String filePath=String.valueOf(filePd.get("FILEPATH"));
File file = new File(filePath);
FileReader reader = new FileReader(file);
BufferedReader bReader = new BufferedReader(reader);
StringBuilder sb = new StringBuilder();
String str = "";
while ((str =bReader.readLine()) != null) {//逐行读取文件内容,不读取换行符和末尾的空格
sb.append(str + "\n");//将读取的字符串添加换行符后累加存放在缓存中
}
bReader.close();
String fileContent = sb.toString();
return fileContent;
}
说明:
(1)通过前端修改请求数据ID,获取文件路径信息;
(2)根据文件路径信息,以流的方式读取文件,将文件内容存储为String(字符串)类型;
三、文件删除
功能实现:(接上)脚本内容修改时,文件操作的逻辑是删除原有文件,根据修改内容新建文件(参考“一、文件创建”,不是本节重点)
/**
* 删除文件
* @param fileName 文件名称
* @return
* @throws IOException
*/
public static boolean delFile(String fileName) throws IOException{
Boolean bool = false;
String filenameTemp = getFilePath()+fileName+".sh";
File file = new File(filenameTemp);
try {
if(file.exists()){
file.delete();
bool = true;
}
} catch (Exception e) {
// TODO: handle exception
}
return bool;
}
说明:
判断文件是否存在,如果存在,通过file的delete()方法实现文件删除。
四、文件上传
功能实现:实现单文件上传。
// 文件上传
public static String uploadFile(MultipartFile file) throws IOException {
String msg = "fail";
String path="D:\\file\\"
File filePath = new File(path);
File file_path_name = new File(path+file.getOriginalFilename());
// 判断目录是否存在
if(!filePath.exists()) {
filePath.mkdirs();
}
// 判断文件是否存在
if(!file_path_name.exists()){
file.transferTo(file_path_name);// MultipartFile自带的解析方法
msg="success";
}else {
File backupFile=new File(file_path_name+Tools.date2Str(new Date())+".bak");
boolean b = file_path_name.renameTo(backupFile);
if(file_path_name.renameTo(backupFile)) {
file.transferTo(file_path_name);
msg="success";
}
}
return msg;
}
五、文件下载
功能实现:实现单文件下载。
// 文件下载
@RequestMapping(value = "/download",produces = "application/octet-stream;charset=UTF-8")
public ResponseEntity<byte[]> download(String filePath,String fileName) throws Exception {
File file = new File(filePath);//指定文件,必须是绝对路径
String dfileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//浏览器响应的文件名,设置编码;
HttpHeaders headers = new HttpHeaders();//设置HttpHeaders,使浏览器响应下载
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);//设置响应方式
headers.setContentDispositionFormData("attachment", dfileName);//设置响应文件
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);//把文件以二进制形式写回,HttpStatus.OK可解决IE下载异常的问题
}
六、文件重命名
功能实现:实现文件的备份。
// 文件名存在特殊字符时,重命名或移动不成功
File file_path_name = new File("test.txt");
File backupFile=new File("test.bak");
boolean b = file_path_name.renameTo(backupFile);
(未完待续。。。。。。)