java 在指定路径生成一个word java在当前目录下生成文件_开发语言

目录

一、需求:

二、实现:

1、完成创建文件,写入文件

2、读取文件

3、删除文件

测试:

注意:

        java的split方法分割字符串(分隔符如* | . ^ )及注意点


一、需求:

        1、创建文件夹,以规定格式保存信息到指定文件,并存放在相应目录下

        2、在保存的目录下读取拿到的文件内容

        3、读取文件完毕后将文件删除

二、实现:

        1、完成创建文件,写入文件

package com.cn.utils;

import com.cn.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 2022/9/21 22:45
 * @Version 1.0
 */
public class CreateFileUtils {

    /*
     * @Author WYD
     * @Description //TODO 在指定路径下创建文件夹及文件
     * @Date 2022/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@mrhc.com.cn
     * @date 2008-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 2022/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 2022/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 com.cn.utils;

import com.cn.Mybatis.pojo.Student;
import lombok.extern.log4j.Log4j2;

import java.io.*;
import java.util.*;

/**
 * @ClassName ReadFileUtils
 * @Description TODO 读取项目下某文件夹下的文件
 * @Author WYD
 * @Date 2022/9/21 23:35
 * @Version 1.0
 */
@Log4j2
public class ReadFileUtils {


    /**
     * 读取文佳佳下的某个文件
     *      1、可重新写入指定文件
     *      2、可作为对象继续传递
     * E:\file\20220924\createFile\FacAcceptDuebill20220924.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
                 */
            }

            //集合排序使用匿名内部类Collections
            Collections.sort(list, new Comparator<Student>() {
                @Override
                public 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\\20220924\\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 com.cn.utils;

import java.io.File;

/*
 * @ClassName DeleteFileUtils
 * @Description TODO 删除指定目录下所有的文件
 * @Author WYD
 * @Date 2022/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 com.cn.utils.CreateFileUtils;
import com.cn.utils.DeleteFileUtils;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;

/**
 * @ClassName FileTest
 * @Description TODO
 * @Author WYD
 * @Date 2022/9/21 22:39
 * @Version 1.0
 */
public class FileTest {

    @Autowired
    DeleteFileUtils deleteFileUtils;
    @Autowired
    CreateFileUtils createFileUtils;

    //删除本地指定目录下的文件
    @Test
    public void deleteTest(){
        //文件绝对路径
        deleteFileUtils.delFolder("E:\\file");
        System.out.println("OK");
    }

    //写入文件
    @Test
    public void createFile() throws IOException {
        createFileUtils.createFile();
        System.out.println("ok");
    }

    //读取文件
    @Test
    public void readHile() throws Exception{
        String fileData = "E:\\file\\20220924\\createFile\\FacAcceptDuebill20220924.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]);