package com.xichengxml.demo01;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 将txt文件比较长的行切割成短行 待完善点:获取文件列数,当前采用的方式获取字符数量
* 使用时注意字符编码格式
* 2018年1月15日下午3:04:25
*
*/
public class AutoLineChange {
public static void main(String[] args) {
// 获取源文件
File srcFile = new File("E:\\tmp\\lesson20171129");
recursiveLineChange(srcFile);
}
/**
* 递归获取文件方法
* @param srcFile
*/
private static void recursiveLineChange(File srcFile) {
// 遍历文件夹
File[] files = srcFile.listFiles();
for (File file : files) {
if (file.isDirectory()) {
recursiveLineChange(file);
} else {
// 设置新文件文件名
String fileName = file.getName();
String newName = fileName.substring(0, fileName.lastIndexOf(".")) + "_2.txt";
File toFile = new File(file.getParentFile(), newName);
fileCopy(file, toFile);
}
}
}
/**
* 文件复制方法,将长行切割为短行
* @param srcFile
* @param toFile
*/
private static void fileCopy(File srcFile, File toFile) {
// 创建字符输入流
FileReader fr = null;
//InputStream is = null;
//InputStreamReader isr = null;
BufferedReader br = null;
FileWriter fw = null;
//OutputStream os = null;
//OutputStreamWriter osw = null;
BufferedWriter bw = null;
try {
fr = new FileReader(srcFile);
//is = new FileInputStream(srcFile);
//isr = new InputStreamReader(is,"gbk");
br = new BufferedReader(fr);
fw = new FileWriter(toFile);
//os = new FileOutputStream(toFile);
//osw = new OutputStreamWriter(os, "gbk");
bw = new BufferedWriter(fw);
// 文件复制
String content = br.readLine();
//StringBuilder strBuf = new StringBuilder();
while (content != null) {
if (content.length() >= 40) {
/*strBuf.append(content.substring(0, 40));
strBuf.append("\\r\\n");
strBuf.append(content.substring(40));*/
//此处针对不太长的文件行数,如果文件行数过长,可以使用len%40,然后循环追加,最好采用stringbuilder
content = content.substring(0, 40) + "\r\n" + content.substring(40);
bw.write(content);
}else {
bw.write(content);
}
bw.newLine();
content = br.readLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
//osw.close();
//os.close();
br.close();
//isr.close();
//is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 删除原文件,将新文件命名为原文件文件名,操作需放在关闭流之后,否则操作失败
srcFile.delete();
toFile.renameTo(new File(toFile.getParentFile(), srcFile.getName()));
}
}
代码说明:有的软件(比如金山打字通)太长的文本会导致显示不出来的现象,因此写了这个文件用于处理单行过长的文件
对文件每一行进行定长切割
最新推荐文章于 2022-08-18 21:48:52 发布