创建一个文本,并且在文本头(第一行)追加该文本有多少条记录的方式。
1、创建文本
private static File file;
public static void CreatFileName2(String PathName,String fileName) {
file=new File(PathName+fileName);
System.out.println("保存文件路径:"+PathName+" 文件名:"+fileName);
try {
if (!file.exists()) {
LOGGER.info("create file is {}",file.getName());
file.createNewFile();
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOGGER.error("create file is fail {}",e);
}
}
/**
* 使用RandomAccessFile写入文 本
* 挺高写入效率
*/
//RandomAccessFile方式创建文本
public static void RandFileLimit(String PathName,String fileName){
try {
rfile = new RandomAccessFile(PathName+fileName, "rw");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
LOGGER.error("acc create file error !!!");
e.printStackTrace();
}
}
2、预留一行,为插入头文本做准备(向文本写数据)
//追加数据进入文本, content = '\r\n'
public static void RandWriteAccFile(String content){
try {
//rfile = new RandomAccessFile(path, "rw");
rfile.seek(rfile.length());
rfile.writeBytes(content);
} catch (IOException e) {
// TODO Auto-generated catch block
LOGGER.error("acc content write error !!!");
e.printStackTrace();
}
}
3、将需要的填写的数据写入文本
// content = "我的数据"
public static void RandWriteAccFile(String content){
try {
//rfile = new RandomAccessFile(path, "rw");
rfile.seek(rfile.length());
rfile.writeBytes(content);
} catch (IOException e) {
// TODO Auto-generated catch block
LOGGER.error("acc content write error !!!");
e.printStackTrace();
}
}
4、向文本头添加数据
/**
* 向文件添加header
* @param header 头数据,以string类型
* @param srcPath 路径+文本,如:E:\company\0512\test.dat
* @throws Exception
*/
public static void appendFileHeader(byte[] header,String srcPath) {
int srcLength;
try {
RandomAccessFile src = new RandomAccessFile(srcPath, "rw");
srcLength = (int)src.length();
byte[] buff = new byte[srcLength];
src.read(buff , 0, srcLength);
src.seek(0);
src.write(header);
src.seek(header.length);
src.write(buff);
src.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
提供自写的CreateWriteFile.java ,以上代码都在这里面,仅供参考
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description
* @author
* @Date 2018年10月3日 下午5:07:11
*/
public class CreateWriteFile {
private static final Logger LOGGER=LoggerFactory.getLogger(CreateWriteFile.class);
private static File file;
private static RandomAccessFile rfile;
public static void CreatFileName(String PathName,StringBuffer fileName) {
file=new File(PathName+fileName.toString());
try {
if (!file.exists()) {
file.createNewFile();
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOGGER.error("create file fail {}",e);
}
}
public static void CreatFileName2(String PathName,String fileName) {
file=new File(PathName+fileName);
try {
if (!file.exists()) {
LOGGER.info("create file is {}",file.getName());
file.createNewFile();
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOGGER.error("create file is fail {}",e);
}
}
public static void CreatFolder(String PathName,String FolderName){
File f = new File(PathName,FolderName);
try {
if(!f.exists()){
f.mkdirs();//创建目录
}
} catch (Exception e) {
// TODO: handle exception
LOGGER.error("Create folder is fail {}",e);
}
}
public static void WriteData(String content,String allName){
File writeFile=new File(allName);
FileWriter writer = null;
try {
// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
writer = new FileWriter(writeFile, true);
writer.write(content);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer != null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//计算dat文件的数据行数
public static long codeStat() throws FileNotFoundException {
long totalLine=0;
long annotationLine=0;
long blankLine=0;
long codeLine=0;
if (file == null || !file.exists())
throw new FileNotFoundException(file + ",文件不存在!");
if (file.isDirectory()) {
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});
} else {
BufferedReader bufr = null;
try {
// 将指定路径的文件与字符流绑定
bufr = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
} catch (FileNotFoundException e) {
throw new FileNotFoundException(file + ",文件不存在!" + e);
}
// 定义匹配每一行的正则匹配器
Pattern annotationLinePattern = Pattern.compile("((//)|(/\\*+)|((^\\s)*\\*)|((^\\s)*\\*+/))+",
Pattern.MULTILINE + Pattern.DOTALL); // 注释匹配器(匹配单行、多行、文档注释)
Pattern blankLinePattern = Pattern.compile("^\\s*$"); // 空白行匹配器(匹配回车、tab键、空格)
Pattern codeLinePattern = Pattern.compile("(?!import|package).+;\\s*(((//)|(/\\*+)).*)*",
Pattern.MULTILINE + Pattern.DOTALL); // 代码行匹配器(以分号结束为一行有效语句,但不包括import和package语句)
// 遍历文件中的每一行,并根据正则匹配的结果记录每一行匹配的结果
String line = null;
try {
while((line = bufr.readLine()) != null) {
if (annotationLinePattern.matcher(line).find()) {
annotationLine ++;
}
if (blankLinePattern.matcher(line).find()) {
blankLine ++;
}
if (codeLinePattern.matcher(line).matches()) {
codeLine ++;
}
totalLine ++;
}
} catch (IOException e) {
throw new RuntimeException("读取文件失败!" + e);
} finally {
try {
bufr.close(); // 关闭文件输入流并释放系统资源
} catch (IOException e) {
throw new RuntimeException("关闭文件输入流失败!");
}
}
}
return totalLine-annotationLine-blankLine-codeLine;
}
/**
* 向文件添加header
* @param header
* @param srcPath
* @throws Exception
*/
public static void appendFileHeader(byte[] header,String srcPath) {
int srcLength;
try {
RandomAccessFile src = new RandomAccessFile(srcPath, "rw");
srcLength = (int)src.length();
byte[] buff = new byte[srcLength];
src.read(buff , 0, srcLength);
src.seek(0);
src.write(header);
src.seek(header.length);
src.write(buff);
src.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 创建文件夹
* @param header
* @param srcPath
* @throws Exception
*/
public static void PaperFile(String pathName){
File file = new File(pathName);
if (!file.exists()) {
file.setWritable(true, false);
file.mkdirs();
}
}
/**
* 使用RandomAccessFile写入文 本
* 挺高写入效率
*/
//RandomAccessFile方式创建文本
public static void RandFileLimit(String PathName,String fileName){
try {
rfile = new RandomAccessFile(PathName+fileName, "rw");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
LOGGER.error("acc create file error !!!");
e.printStackTrace();
}
}
//追加数据进入文本
public static void RandWriteAccFile(String content){
try {
//rfile = new RandomAccessFile(path, "rw");
rfile.seek(rfile.length());
rfile.writeBytes(content);
} catch (IOException e) {
// TODO Auto-generated catch block
LOGGER.error("acc content write error !!!");
e.printStackTrace();
}
}
//关闭IO流
public static void Close()
{
try {
rfile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}