读txt文件
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
public class ReadTextFile {
public static void main(String[] args) {
try {
File dir = new File("D:\\codes\\河南省公告\\result");
File[] files = dir.listFiles();
//模拟要写入excel的数据
List<ExcelDTO> list = new ArrayList<>();
for (File f : files) {
FileReader fr = new FileReader(f.getPath());
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
// todo
}
}
br.close();
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
新版本的Java提供了NIO,对于JDK11及以上版本,可以这样读取:
Path path = Paths.get("/Users/zhangchao/Downloads/demo.txt");
String data = Files.readString(path);
System.out.println(data);
写txt文件
BufferedWriter类是Writer的子类,它为了提高效率,加入了缓冲技术,将字符读取对象作为参数。
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须先要有流对象。
为了提高字符写入流的效率,加入的缓冲技术,在对象里面封装了数组,只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可,记住只要用到缓冲区就要刷新。关闭缓冲区,其实关闭缓冲区就是在关闭缓冲区中的流对象。
BufferedWriter类将一个常量值作为默认缓冲区的大小,它同时也可以通过构造函数来指定大小。
提供了newLine()方法,它使用自己的行分隔符概念,它是由系统自带的属性line.separator定义,并非使用换行符来终止行.
writer会立即将其输出发送到基础字符或字节流,所以在使用BufferedWriter来包装writer的子类可以提高输出的效率
在使用bufferedWriter类的write()方法时,数据并没有立刻写入输入流,而是首先进入缓存区中,如果想立刻将缓存区中的数据写入输出流,一定要调用flush()方法。
为了提高字符写入流的效率,加入的缓冲技术,在对象里面封装了数组,只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可,记住只要用到缓冲区就要刷新。关闭缓冲区,其实关闭缓冲区就是在关闭缓冲区中的流对象。
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("./buff.txt");
BufferedWriter bw = new BufferedWriter(fw);
for (int x = 1 ; x<9;x++){
bw.write("abcd" + x);
bw.newLine();
bw.flush();
}
float[] obj_incre = new float[3];
obj_incre[0] = 1.0f;
obj_incre[1] = 2.0f;
obj_incre[2] = 3.0f;
String str = null;
StringBuilder str_result = new StringBuilder();
for (int i = 0; i < obj_incre.length; i++) {
str = Float.toString(obj_incre[i]) + " ";
str_result.append(str);
}
bw.write(String.valueOf(str_result));
bw.newLine();
bw.flush();
bw.close();
}
}
写excel
pom引入easyExcel依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
创建实体类
@Data
public class User {
//设置表头名称
@ExcelProperty(value = "用户编号")
private int id;
//设置表头名称
@ExcelProperty(value = "用户名称")
private String name;
}
写操作
public class TestWrite {
public static void main(String[] args) {
//设置文件名称和路径
String fileName="I:\\temp\\ggkt\\test.xlsx";
//调用方法
EasyExcel.write(fileName,User.class)
.sheet("写操作")
.doWrite(data());
}
//循环设置要添加的数据,最终封装到list集合中
private static List<User> data() {
List<User> list = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User data = new User();
data.setId(i);
data.setName("lucy"+i);
list.add(data);
}
return list;
}
}
读操作
创建实体类
@Data
public class User {
//设置表头名称
//设置列对应的属性
@ExcelProperty(value = "用户编号",index = 0)
private int id;
//设置表头名称
//设置列对应的属性
@ExcelProperty(value = "用户名称",index = 1)
private String name;
}
@Test
public void contextLoads() {
File originfile = new File("D:\\codes\\huayu\\text_files\\招中标公告0725.xlsx");
//默认读取Excel文件的第一个sheet
List<User> originList = EasyExcel.read(originfile).head(User.class).sheet().doReadSync();
HashMap<Integer, User> originMap = new HashMap<>();
for (User user : originList) {
// todo
}
}