Java文件操作,真格是晕是我的,和其他语言或者脚本来说,这代码量确实大了点。希望java7以后会越来越方便
package com.tf.initdata.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class FileHelper {
private static final Log logger = LogFactory.getLog(FileHelper.class);
/**
* 重命名文件
* */
public static void renamefile(File file,String descfilename)
{
try
{
file.renameTo(new File(descfilename));
}catch(Exception e){
logger.error("FTP 重命名文件出错.....");
}
}
/**
* 获取文件有多少行(文本里面空行也会算)
* */
public static long getFileLines(File file) throws IOException{
RandomAccessFile raf = new RandomAccessFile(file, "r");
long size = raf.length();
if(size==0){
return 0;
}
raf.seek(0);
long lines = 0L;
int len = size < 32768 ? (int)size : 32768;
long c = size/len;
byte[] buffer = new byte[len];
for(int i=0;i<c;i++){
raf.read(buffer);
for(int j=0;j<len;j++){
if(buffer[j] == '\n'){
lines++;
}
}
}
int rest = (int)(size%len);
raf.read(buffer,0, rest);
for(int j=0;j<rest;j++){
if(buffer[j] == '\n'){
lines++;
}
}
raf.close();
return lines;
}
/**
* 判断该文件最后一行是否又end标记(文本里面空行也会算)
* */
public static String readLastLine(File file, String charset) throws IOException {
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 || charset.isEmpty()) {
return new String(bytes);
} else {
return new String(bytes, charset);
}
}
} catch (FileNotFoundException e) {
} finally {
if (raf != null) {
try {
raf.close();
} catch (Exception e2) {
}
}
}
return null;
}
/**
* 文件复制
* copyflag=0 复制 copyflag=1 剪切
* */
public static void copyFile(File src, File dest,int copyflag)
throws Exception {
BufferedInputStream reader = null;
BufferedOutputStream writer = null;
try {
reader = new BufferedInputStream(new FileInputStream(src));
writer = new BufferedOutputStream(new FileOutputStream(dest));
byte[] buff = new byte[reader.available()];
while ((reader.read(buff)) != -1) {
writer.write(buff);
}
if(copyflag == 1){
src.delete();
}
} catch (Exception e) {
throw e;
} finally {
writer.flush();
writer.close();
reader.close();
}
if(copyflag == 1){
src.delete();
}
}
/**
* 将一个目录下所有符合条件的文件,剪切到另外一个文件夹里
* */
public static void moveFileByModule(String srcDirectory,String destDirectory,String modulefilename)throws Exception
{
File srcFolder = new File(srcDirectory);
File[] srcfiles = srcFolder.listFiles();
for (File file : srcfiles)
{
if(file.isFile())
{
String fileName = file.getName();
if(fileName.startsWith(modulefilename))
{
String pathname = destDirectory+File.separator+fileName;
File dest = new File(pathname);
copyFile(file, dest,1);
}
}
}
}
/**
* 判断指定目录中是否包含文件
* */
public static boolean fileExists(String directory,String filename)
{
File directFile = new File(directory);
if (directFile.exists() && directFile.isDirectory())
{
File[] files = directFile.listFiles();
for(File file:files)
{
if(filename.equals(file.getName())){
return true;
}
}
}
return false;
}
/**
* 判断指定目录中是否包含某文件名开头的文件
* */
public static boolean fileModuleExists(String directory,String filename)
{
File directFile = new File(directory);
if (directFile.exists() && directFile.isDirectory())
{
File[] files = directFile.listFiles();
for(File file:files)
{
if(file.getName().startsWith(filename)){
return true;
}
}
}
return false;
}
/**
* 取得指定文件名开头的文件列表
* */
public static List<File> getFilesByModuleName(String directory,String filename)
{
List<File> files = new ArrayList<File>();
File directFile = new File(directory);
if (directFile.exists() && directFile.isDirectory())
{
File[] filest = directFile.listFiles();
for(File file:filest)
{
if(file.getName().startsWith(filename)){
files.add(file);
}
}
}
return files;
}
public static void deleteFile(File filewithPath){
if(filewithPath.exists() && filewithPath.isFile()){
if(filewithPath.canExecute()){
filewithPath.delete();
}
}
}
/*
public static void main(String args[]) throws Exception
{
File hygcl = new File("hygcl201203010001.txt");
String endStr = readLastLine(hygcl,"");
System.out.println(endStr);
}*/
}