IO资源的自动释放
在try块中使用try( 申明及初始化IO资源 ) 数据流会在 try 执行完毕后自动被关闭;
前提是,这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。
例子可见后面内容;
流式文件内容追加
// 写一行 并 换行
private void appendToFile(String fileName,String strToWrite){
try (
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName,true),"UTF-8"))
){
bw.write(strToWrite);
bw.newLine();
logger.info("写文件成功");
}catch (Exception e){
logger.error("写文件失败,内容为:"+strToWrite+" other: "+e);
}
}
流式文件读取
try (
BufferedReader bufReader = new BufferedReader(new InputStreamReader(new FileInputStream(TEMPFILENAME), "UTF-8"))
) {
String str = null;
Long tempcount = 0L;
while ((str = bufReader.readLine()) != null) {
~~~~
}
}catch (Exception e){
logger.error("读文件失败"+e);
}
}
读取文件最后一行(随机读取)
private String readFinalLine(String fileName){
RandomAccessFile rf = null;
try {
rf=new RandomAccessFile(fileName,"r");
long len=rf.length();
if(len==0){
return null;
}
long start=rf.getFilePointer();
long nextend=start+len-1;
String line;
rf.seek(nextend);
int c=-1;
while(nextend>start){
c=rf.read();
if(c=='\n'||c=='\r'){
line=rf.readLine();
if(line==null||line.length()==0){//处理文件末尾是空行这种情况
nextend--;
rf.seek(nextend);
continue;}
return line;
}
}
} catch (Exception e) {
logger.error("Exception reading record file "+e);
}
finally {
try {
if (rf != null)
rf.close();
} catch (IOException e) {
logger.error("Exception reading file "+e);
}
}
return null;
}
清空文件
// 读取文件完毕后清空文件内容
private void clearFileContent(String fileName){
try (BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8"))
){
bw.write("");
logger.info("清空文件成功");
}catch (Exception e){
logger.error("清空文件失败,内容为:"+e);
}
}