java实现对文本文件内容的读取与将内容写入到文本文件

2,145 阅读2分钟

本文内容

  • java实现对文件内容的读取,暂时未完善插入数据库部分
  • 将内容写入到文本文件,暂时未完善从数据库查询部分

前置知识

  • IO流
  • Exception
  • Eclipse/IDEA 等工具
  • JDBC/Hibernate/Mybatis/JPA 等

问题

  1. 配合定时任务,将文本中数据导入到数据库
  2. 对于数据库的信息可以写入到文本中方便客服修改
  3. 导出到文件时,根据文件状态进行指定需要导出的数据
  4. 文件导出完毕,则该条信息的文件状态为已导出
  • 实体类
package club.model;
import java.util.Date;
public class Student {
	private String id;//编号
	private String name;//姓名
	private String gender;//性别
	private Integer age;//年龄
	private Double score;//分数
	private String file_status;//文件状态
	private Date file_time;//文件日期.方便后期管理
	private String remark;//备注
//get和set方法此处省略
//toString方法此处省略
}
  • 工具类
package club.utils;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
import java.util.List;

import club.model.Student;


public class ImportInfoFromText {
	public static final String OPEN_FILE_STYLE="r"; //r=read
	public static final String FIELLD_LIMIT_CHAR="\\|";//这里竖线需要被转义一下
	
	public static void main(String[] args) {//执行测试
//		String filePath="/home/left/Downloads/test.txt";
		String filePath="D:\\test.txt";
		readFromText(filePath);
	}
	/**
	 * 从文本中读取信息
	 * @param filePath
	 */
	public static int readFromText(String filePath) {
		String line_record=null;
		int count=0;
		try {
			RandomAccessFile raf=new RandomAccessFile(filePath, OPEN_FILE_STYLE);
			while(null!=(line_record=raf.readLine())) {
                         //这里看操作系统的编码集,一般Windows中文默认是GBK,Linux是UTF-8
			line_record=new String(line_record.getBytes("ISO-8859-1"),"GBK");
				Student stu = parseRecord(line_record);
				System.out.println(stu);
				count+=1;
			}
			System.out.println("本次共导入数据 "+count+" 条");
		} catch (FileNotFoundException ef) {
			ef.printStackTrace();
		} catch (IOException ei) {
			ei.printStackTrace();
		}
		return count;
	}
	/**
	 * 
	 * @param line_record
	 * @return
	 */
	public static Student parseRecord(String line_record){
		Student stu=new Student();
		
		String[] fields=line_record.split(FIELLD_LIMIT_CHAR);//拆分块记录
		stu.setId(fields[0]);
		stu.setName(fields[1]);
		stu.setGender(fields[2]);
		stu.setAge(Integer.parseInt(fields[3]));
		stu.setScore(Double.parseDouble(fields[4]));
		return stu;
	}
	
	public void writeToTxt(String path,String fileName) throws IOException {
		Student stu=new Student();
		stu.setFile_status("01");//对于文件状态,01表示未导出,02表示导出中,03表示已导出成功. 
		List<Student> stus=null;//通过查询得到
		
		int count=0;
		OutputStreamWriter out=new OutputStreamWriter(new FileOutputStream(path+fileName,true), "UTF-8");
		try {
			if(stus.size()>0) {
				for (Student student : stus) {
					stu.setId(student.getId());
					stu.setFile_status("02");
					if(1==2) {//如果更新操作顺利执行
						out.write(student.toString());//具体格式参照toString
						stu.setFile_status("03");
						if(true) {
							count+=1;
						}
					}else {
						System.out.println("更新当前条数失败  ID为  "+student.getId());
					}
					
				}
				System.out.println("本次共成功导出文到文件 "+count+" 条");
			}else {
				System.out.println("未能查询到需要导出的数据");
			}
		} catch (Exception e) {
			System.out.println("writeToTxt error");
		}finally {
			out.flush();
			out.close();
		}
	}
}
  • 文本测试数据
0001|小明|1|18|100
0002|小红|1|17|95
0003|小刚|1|17|90
0004|小丽|1|18|100
  • 读物文件信息测试结果

读取文件信息测试结果