目录
一、需求:
二、实现:
1、完成创建文件,写入文件
2、读取文件
3、删除文件
测试:
注意:
java的split方法分割字符串(分隔符如* | . ^ )及注意点
一、需求:
1、创建文件夹,以规定格式保存信息到指定文件,并存放在相应目录下
2、在保存的目录下读取拿到的文件内容
3、读取文件完毕后将文件删除
二、实现:
1、完成创建文件,写入文件
package .utils;import .Mybatis.pojo.Student;import java.io.*;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;/*** @ClassName CreateFileUtils* @Description TODO 在指定目录下存入文件* @Author WYD* @Date /9/21 22:45* @Version 1.0*/public class CreateFileUtils {/** @Author WYD* @Description //TODO 在指定路径下创建文件夹及文件* @Date /9/21* @Param []* @Version 1.0* @return void**/public static void createFile() throws Exception {try {//当前系统时间String workDateStr = formatDateToString(new Date(), "yyyyMMdd");//本地文件地址String loaclAddress = "E:\\file";//文件存放路径String realAddr = loaclAddress + File.separator + workDateStr + File.separator + "createFile";File file = new File(realAddr);//判断文件路径是否存在if (!file.exists()) {//如果不存在,则创建file.mkdirs();}String fileFlagName = "FacAcceptDuebill" + workDateStr + ".FLG";String fileDataName = "FacAcceptDuebill" + workDateStr + ".dat";//标记文件File fileFlag = new File(realAddr + File.separator + fileFlagName);fileFlag.createNewFile();//数据文件File fileData = new File(realAddr + File.separator + fileDataName);fileData.createNewFile();//初始化文件信息 --》》》业务操作List<Student> list = new ArrayList<>();//实例化对象Student s1 = new Student();s1.setName("张三");s1.setAge(19);s1.setType("A");Student s2 = new Student();s2.setName("李四");s2.setAge(12);s2.setType("A");list.add(s1);list.add(s2);//文件内容String strFileContent = buildFileStr(list);System.out.println("组装后的文件信息:" + strFileContent);//新建文件newFile(realAddr + File.separator + fileDataName, strFileContent, true);//****写到 本地文件Writer writer = new OutputStreamWriter(new FileOutputStream(fileData), "UTF-8");writer.write(strFileContent);writer.close();} catch (Exception e) {throw new Exception("文件写入异常");}}/*** 方法说明: 新建文件** @param filePathAndName 文件路径及名称 如c:/abc/a.txt* @param fileContent文件内容* @return* @author E-mail: pengdaochang@* @date -9-17 下午03:09:09*/public static void newFile(String filePathAndName, String fileContent, boolean isAppend) {try {String filePath = filePathAndName;filePath = filePath.toString();File myFilePath = new File(filePath);if (!myFilePath.exists()) {myFilePath.createNewFile();}FileWriter resultFile = new FileWriter(myFilePath, isAppend);PrintWriter myFile = new PrintWriter(resultFile);String strContent = fileContent;myFile.println(strContent);resultFile.close();} catch (Exception e) {System.out.println("新建目录操作出错");e.printStackTrace();}}/*** 格式化文件 拼接文件 "|"分割开(需求)** @return void* @Author WYD* @Description //TODO 拼接文件 "|"分割开* @Date /9/21* @Param [resut, workDateStr]* @Version 1.0**/public static String buildFileStr(List<Student> studentList) {StringBuffer fileStr = new StringBuffer();/************************************组装文件*****************************/for (int i = 0; i < studentList.size(); i++) {Student student = studentList.get(i);String separator = "|";fileStr.append(student.getName()).append(separator);fileStr.append(student.getType()).append(separator);if (i == studentList.size() - 1) {fileStr.append(student.getAge()).append(separator);} else {//换行fileStr.append(student.getAge()).append(separator).append("\r\n");}}return fileStr.toString();}/*** @return java.lang.String* @Author WYD* @Description //TODO date---> String* @Date /9/21* @Param [date类型的日期, 格式化类型]* @Version 1.0**/public static String formatDateToString(Date date, String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(date);}}
2、读取文件
package .utils;import .Mybatis.pojo.Student;import lombok.extern.log4j.Log4j2;import java.io.*;import java.util.*;/*** @ClassName ReadFileUtils* @Description TODO 读取项目下某文件夹下的文件* @Author WYD* @Date /9/21 23:35* @Version 1.0*/@Log4j2public class ReadFileUtils {/*** 读取文佳佳下的某个文件*1、可重新写入指定文件*2、可作为对象继续传递* E:\file\0924\createFile\FacAcceptDuebill0924.txt** @param fileData* @throws Exception*/public static void readFileAndUpdateCustRisk(String fileData) throws Exception {//TODO// JAVA中 “|“和“.“作为分隔符分割字符串无法拆分的问题 --> "|" 和 "."在Java中有特殊的意义(这种是拆分不了的,需要转义)String separator = "\\|";BufferedReader reader = null;try {//读取文件路径InputStream inputStream = new FileInputStream(fileData);//设置防止乱码格式InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf8");//读取文件reader = new BufferedReader(inputStreamReader);//创建学生集合List<Student> list = new ArrayList<Student>();String riskStr = "";//标题行String title = null;//行数int in = 0;//学生对象Student student = null;while ((riskStr = reader.readLine()) != null) {//每次循环创建新的学生对象student = new Student();//获取标题行if (in == 0) {title = riskStr;System.out.println(title);/** 123|sadasd|wangyandeng|lilullu|*/in = 1;} else {System.out.println(riskStr);/** 张三|A|19|* 李四|A|12|* 王五|B|21|*/String[] split = riskStr.split(separator);//设置属性student.setName(split[0]);student.setType(split[1]);student.setAge(Integer.parseInt(split[2]));list.add(student);}}System.out.println(list);/** [Student(name=张三, age=19, type=A), Student(name=李四, age=12, type=A), Student(name=王五, age=21, type=B)]*///遍历for (Student s : list){System.out.println(s.getName()+"..."+s.getAge()+"..."+s.getType());/** 张三...19...A* 李四...12...A* 王五...21...B*/}//集合排序使用匿名内部类CollectionsCollections.sort(list, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {// TODO Auto-generated method stub// 排序主要条件:按成绩排序int num = o1.getAge() - o1.getAge();return num;}});//写入指定文件夹BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\file\\0924\\createFile\\测试.txt"));// 写入标题行bw.write(title + "\n");for (Student s : list) {bw.write(s.getName()+"|"+s.getAge()+"|"+s.getType()+"|");bw.newLine();}bw.close();} catch (Exception e) {log.error("读取失败", e);throw new Exception("读取失败" + e.getMessage());} finally {if (reader != null) {reader.close();}}}public static void main(String[] args) {String s = "asdas|sadasd|546";String[] split = s.split("\\|");System.out.println(split[0]);}}
3、删除文件
package .utils;import java.io.File;/** @ClassName DeleteFileUtils* @Description TODO 删除指定目录下所有的文件* @Author WYD* @Date /9/21 22:33* @Version 1.0*/public class DeleteFileUtils {// 删除文件夹// param folderPath 文件夹完整绝对路径public static void delFolder(String folderPath) {try {// 删除完里面所有内容delAllFile(folderPath);String filePath = folderPath;filePath = filePath.toString();File myFilePath = new java.io.File(filePath);//删除空文件夹myFilePath.delete();} catch (Exception e) {e.printStackTrace();}}// 删除指定文件夹下所有文件// param path 文件夹完整绝对路径public static boolean delAllFile(String path) {boolean flag = false;File file = new File(path);if (!file.exists()) {return flag;}if (!file.isDirectory()) {return flag;}String[] tempList = file.list();File temp = null;for (int i = 0; i < tempList.length; i++) {if (path.endsWith(File.separator)) {temp = new File(path + tempList[i]);} else {temp = new File(path + File.separator + tempList[i]);}if (temp.isFile()) {temp.delete();}if (temp.isDirectory()) {delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件delFolder(path + "/" + tempList[i]);// 再删除空文件夹flag = true;}}return flag;}}
测试:
import .utils.CreateFileUtils;import .utils.DeleteFileUtils;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import java.io.IOException;/*** @ClassName FileTest* @Description TODO* @Author WYD* @Date /9/21 22:39* @Version 1.0*/public class FileTest {@AutowiredDeleteFileUtils deleteFileUtils;@AutowiredCreateFileUtils createFileUtils;//删除本地指定目录下的文件@Testpublic void deleteTest(){//文件绝对路径deleteFileUtils.delFolder("E:\\file");System.out.println("OK");}//写入文件@Testpublic void createFile() throws IOException {createFileUtils.createFile();System.out.println("ok");}//读取文件@Testpublic void readHile() throws Exception{String fileData = "E:\\file\\0924\\createFile\\FacAcceptDuebill0924.txt";readFileUtils.readFileAndUpdateCustRisk(fileData);System.out.println("ok");}}
注意:
java的split方法分割字符串(分隔符如* | . ^ )及注意点
1、split表达式,其实就是一个正则表达式。* | . ^ 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\加以转义。
String add1="南京*建邺区";String[] splitAdd1=add1.split("\\*");System.out.println(splitAdd1[0]+splitAdd1[1]);String add2="南京|建邺区";String[] splitAdd2=add2.split("\\|");System.out.println(splitAdd2[0]+splitAdd2[1]);String add3="南京.建邺区";String[] splitAdd3=add3.split("\\.");System.out.println(splitAdd3[0]+splitAdd3[1]);String add4="南京^建邺区";String[] splitAdd4=add4.split("\\^");System.out.println(splitAdd4[0]+splitAdd4[1]);
2、如果使用多个分隔符则需要借助 | 符号。
String address="南京1^南京2*南京3#南京4|南京5";String[] splitAddress=address.split("\\^|\\*|#|\\|");System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]+splitAddress[4]);