【LWei-开发】SpringMVC+File实现文件管理(内容写入、内容读取、文件删除、文件上传、文件下载)

一、文件内容创建(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);

(未完待续。。。。。。)


猜你喜欢

转载自blog.csdn.net/u013153374/article/details/84553557