例子:写文件,在文件末尾追加文字并且指定输出文件内容字符编码为utf-8:
备注:只有字符流可以确定编码,因为字符编码是对应字符的,无法对字节流编码,所以我们得找到一个Writer的子类来指定输出字符的编码.
OutputStreamWriter osw=null;
FileOutputStream fos=null;
//文件末尾追加,构造方法第二个参数true来确定
fos = new FileOutputStream(file,true);
//指定输出文件内容编码为utf-8,构造方法第二个参数true来确定
OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
有的时候直接调用file.delete();时候,删除文件可能不成功!面对这种情况,首先确保file对象句柄的锁定是否释放,例如某输出流是否关闭。此外jkd1.5之后关闭流释放资源有一些延时,我们最好调用垃圾回收机制,去释放资源!
/*
* 删除文件
* @param file
* @return
*/
protected boolean delFile(File file){
boolean result = false;
int tryCount = 0;
while(!result && tryCount++ <10){
System.gc();
result = file.delete();
LOG.info("删除文件:"+file.getAbsolutePath()+","+result);
}
return result;
}
判断文件是否为空
/*
* 判断文件是否为空
* @param sendSMSfile
* @return
*/
protected boolean NotEmptyFile(File sendSMSfile) {
FileReader fr=null;
BufferedReader br=null;
try {
fr=new FileReader(sendSMSfile);
br=new BufferedReader(fr);
if(br.readLine()!=null)
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(br!=null){
br.close();
}
if(fr!=null){
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
文件末尾追加一行
/*
* 文件末尾添加结束标记
* @param file
* @param mark
* @return
*/
protected void appendNewLine(File file,String content){
FileWriter fw=null;
try {
fw=new FileWriter(file.getPath(),true);
//fw.write("\n");
fw.write(content);
} catch (IOException e) {
e.printStackTrace();
}finally{
try{
if(fw!=null){
fw.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
读取文件最后一行
/**
* 文件完整传输
* @param file
* @param charset
* @return
*/
private String readLastLine(File file, String charset) {
if (!file.exists() || file.isDirectory() || !file.canRead()) {
return null;
}
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(file, "r");
long len = raf.length();
if (len == 0L) {
return "";
} else {
long pos = len - 1;
while (pos > 0) {
pos--;
raf.seek(pos);
if (raf.readByte() == '\n') {
break;
}
}
if (pos == 0) {
raf.seek(0);
}
byte[] bytes = new byte[(int) (len - pos)];
raf.read(bytes);
if (charset == null) {
return new String(bytes);
} else {
return new String(bytes, charset);
}
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
e.printStackTrace();
} finally {
if (raf != null) {
try {
raf.close();
} catch (Exception e2) {
}
}
}
return null;
}
拷贝文件
package com.wlh.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
static String srcDir="D:\\SOCKET\\server_fa";//全局
static String descDir="D:\\SOCKET\\ABC";//全局
public static void main(String[] args) throws IOException {
//copyFile(srcDir,descDir);
deleteDirectory(new File(srcDir));
}
/**
* 拷贝目录
* @param srcs
* @param desc
* @throws IOException
*/
public static void copyFile(String srcs,String desc) throws IOException{
File srcdir=new File(srcs);
File descdir=new File(desc);
if(!descdir.exists()){
descdir.mkdirs();
}
File [] files=srcdir.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isFile()){
FileInputStream in=new FileInputStream(files[i]);
File file=new File(desc+File.separator+files[i].getName());
if(!file.exists())
file.createNewFile();
FileOutputStream out=new FileOutputStream(file);
int c;
byte buffer[]=new byte[1024];
while((c=in.read(buffer))!=-1){
for(int k=0;k<c;k++)
out.write(buffer[k]);
}
in.close();
out.close();
}else{
copyFile(files[i].getAbsolutePath(),descDir+files[i].getAbsolutePath().substring(srcDir.length()));
}
}
}
[color=red][b]删除一个目录[/b][/color]
/**
* 递归删除一个目录以及下面的文件
*/
public static boolean deleteDirectory(File path) {
if( path.exists() ) {
File[] files = path.listFiles();
for(int i=0; i<files.length; i++) {
if(files[i].isDirectory()) {
deleteDirectory(files[i]);
}
else {
//删除文件
files[i].delete();
}
}
}
//删除目录
boolean hasdelete=path.delete();
if(hasdelete){
System.out.println("删除目录:"+path);
}
return hasdelete;
}
}
文件末尾追加文字
public class FileAppendTest {
/**
* 利用FileoutStream构造方法的每二个参数实现内容的追加
* @param f 文件
* @param context 所要追加的内容
*/
public static void append01(File f,String context) throws Exception{
BufferedWriter br = new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(f,true)));
br.write(context);
br.flush();
br.close();
}
/**
* 利用FileWriter构造方法中的第二个参数实现内容的追加
* @param f 文件
* @param context 内容
*/
public static void append02(File f,String context)throws Exception{
FileWriter fw = new FileWriter(f, true);
fw.write(context);
fw.flush();
fw.close();
}
/**
* 利用RandomAccessFile的seek()方法,
* 将写文件指针移至文件末尾,实现内容的追加
* @param f 文件
* @param context 内容
*/
public static void append03(File f,String context)throws Exception{
RandomAccessFile raf = new RandomAccessFile(f, "rw");
raf.seek(raf.length());//将写文件指针移至文件末尾
raf.writeBytes(context);
raf.close();
}
}