Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251962
  • 博文数量: 65
  • 博客积分: 2026
  • 博客等级: 大尉
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-12 14:34
文章分类

全部博文(65)

文章存档

2012年(1)

2011年(1)

2010年(1)

2009年(2)

2008年(7)

2007年(6)

2006年(47)

我的朋友

分类: Java

2006-04-01 16:07:16

package com.dahan.wd.tools;
/**********************************
 *本类为文件工具类
 *
 *
 *
 *       wd
 *       2005-9-7
 **********************************/
import java.io.*;
import java.lang.*;
public class FileTools {
 //类方法 解析一个文件名的后缀 不包含"."
 //retuen  后缀名 返回""表示没有后缀
 public static String ExtractFileExt(String AFileName)
 {
  int i;
  String s;
  try
  {
   i=AFileName.lastIndexOf(".");
  }
  catch (NullPointerException e)
  {
   i=-1;
  }
  if (i==-1)
  {
   return "";
  }
  else
  {
   s=AFileName.substring(i+1);
   if (s==null) s="";
   return s;
  } 
   
  
  
 }
 
 //类方法 解析一个文件名的路径部分
 //return 路径包含\ 返回""表示没有路径
 //注意只能在win32下正确作用
 public static String ExtractFilePath(String AFileName)
 {
  File f=new File(AFileName);
  String s;
  s=f.getParentFile().getPath();
  if (s==null) s="";
 
  
  
  return s;  
   
 }
 
 //解析得到一个文件名
 public static String ExtractFileName(String AFileName)
 {
  int k;
  
  k=AFileName.lastIndexOf(File.separator);
  if(k==-1)
  {
   //不含路径 直接返回
   return AFileName;
  }
  else
  {
   return AFileName.substring(k+1);
  }
  
  
 }
 
 //类方法 分卷分割一个文件 保存在指定目录
 //AFileName 源文件完整路径+文件名
 //VolumeSize 分卷大小
 //ASavePath 保存路径
 //bDelSrcFile 是否删除源文件
 public static void SplitFile(String AFileName,int VolumeSize,String ASavePath,boolean bDelSrcFile) throws Exception
 {
  File fsrc;//源文件
  File fout;//目的文件
  FileInputStream reader;
  FileOutputStream writer;
  byte[] buf;
  int i,n;
  String s;
  
  if (VolumeSize<=0) VolumeSize=1048576;
  
  //MyLog.LogDebugInfo("FileTools","splitFile","VolumeSize="+String.valueOf(VolumeSize));
  
  fsrc=new File(AFileName);
  if (fsrc.exists()==false) return;
  
  reader=new FileInputStream(fsrc);
  //读取VolumeSize个到buf之中
  n=1;//读出长度
  i=0;//i为文件名后缀指示变量
  try
  {
   while (n>-1)
   { 
    buf=null;
    buf=new byte[VolumeSize];
    n=reader.read(buf);
    if (n>0)
    {
     //放入out文件流中
     //定义文件名称
     
     //MyLog.LogDebugInfo("FileTools","splitFile","n="+String.valueOf(n));
     
      
     s=fsrc.getName()+".s"+String.valueOf(i);
     fout=new File(ASavePath,s);
     writer=new FileOutputStream(fout);
     try
     {
      writer.write(buf,0,n);
     
     }
     finally
     {
      writer.close();
      writer=null;
      fout=null;
     }
     i++;
    
    }
   
   }
  }
  finally
  {
   reader.close();
   reader=null;
  }
  
  if (bDelSrcFile)
  {
   fsrc.delete();
  }
  
  
  
 }
 
 
 //类方法 组合分卷文件形成单一文件
 //根据AFileList顺序合并文件
 //文件名pkgname必须一致
 //APath为AfileList内部文件所在的目录 当该值为null or ""时候 AFileList必须包含完整路径信息
 //返回组合完毕的二进制流
 public static byte[] CombinFile(String APath, String[] AFileList) throws Exception
 {
  int i,j,len;
  String s,s0,path;//s 文件名 s0不包含拓展名的文件名称
  File fin;
  FileInputStream finstm;
  ByteArrayOutputStream foutstm;
  
  byte[] buf;
  
  len=AFileList.length;
  if (len==0) return null;
  //得到不包含文件拓展名的文件名称 和路径 以供组合
  
  fin=new File(AFileList[0]);
  s0=fin.getName();
  if (APath!=null && APath.equals("")==false)
  {
   path=APath;
  }
  else
  {
   path=fin.getParent();
  }
  
  
  
  i=s0.lastIndexOf(".");
  if (i!=-1) //i=-1 说明没有拓展名
  {
   s=s0.substring(0,i);
   s0=s;
  }
  
  
  
  foutstm=new ByteArrayOutputStream();
  try
  {
   for (i=0;i   {
    //得到一块文件的名字
    //s=s0+".s"+String.valueOf(i);
    s=AFileList[i];
    fin=new File(path,s);
    //MyLog.LogDebugInfo("FileTools","CombinFile","path="+path);
    //MyLog.LogDebugInfo("FileTools","CombinFile","filename="+s);
    if (fin.exists()==false)
    {
     throw new Exception("文件"+s+"不存在!!!!");
    }
    finstm=new FileInputStream(fin);
    buf=new byte[(int)fin.length()];
    try
    {
     finstm.read(buf);
     foutstm.write(buf);
     buf=null;
    }
    finally
    {
     finstm.close();
     finstm=null;
    }
    
    
   }
   //返回二进制流
   return foutstm.toByteArray();
  }
  finally
  {
   foutstm.close();//释放资源是美德
   foutstm=null;
  }
 }
 
 ////类方法 组合分卷文件形成单一文件
 //根据AFileList顺序合并文件
 //文件名pkgname必须一致
 //APath为AfileList内部文件所在的目录 当该值为null or ""时候 AFileList必须包含完整路径信息
 //OutFileName假如为null 或者为 "" 使用AFileList抽取的文件名称
 public static void CombinFile(String APath, String[] AFileList,String OutFileName) throws Exception
 {
  File fin,fout;
  FileOutputStream foutstm;
  int len,i;
  byte[] buf;
  String s0,s;
  
  len=AFileList.length;
  if (len==0) return ;
  //得到不包含文件拓展名的文件名称 和路径 以供组合
  fin=new File(AFileList[0]);
  s0=fin.getName();
  i=s0.lastIndexOf(".");
  if (i!=-1) //i=-1 说明没有拓展名
  {
   s=s0.substring(0,i);
   s0=s;
  }
  //s0之中包含有不含拓展名的文件名称
  if (OutFileName==null || OutFileName.equals(""))
  {
   OutFileName=s0;
  }
  
  buf=FileTools.CombinFile(APath,AFileList);
  fout=new File(OutFileName);
  foutstm=new FileOutputStream(fout);
  try
  {
   foutstm.write(buf);
  }
  finally
  {
   foutstm.close();
   foutstm=null;
  }
  
  
 }
 
 
 //读取文件获得二进制信息
 public static byte[] ReadFile(String AFileName) throws Exception
 {
  File f;
  
  f=new File(AFileName);
  if (f.exists()==false) return null;
  
  return FileTools.ReadFile(f);
 }
 public static byte[] ReadFile(String APath,String AFileName) throws Exception
 {
  File f;
  f=new File(APath,AFileName) ;
  if (f.exists()==false) return null;
  
  return FileTools.ReadFile(f);
 }
 public static byte[] ReadFile(File AFile) throws Exception
 {
  byte[] buf;
  FileInputStream finstm;
  
  finstm=new FileInputStream(AFile);
  buf=new byte[(int)AFile.length()];
  try
  {
   finstm.read(buf);
   return buf;
  }
  finally
  {
   finstm.close();
   finstm=null;
  }
  
 }
 
 //写2进制流入文件
 public static void WriteFile(String AFileName,byte[] buf) throws Exception
 {
  File f;
  f=new File(AFileName);
  FileTools.WriteFile(f,buf);
 }
 
 //写2进制流入文件
 public static void WriteFile(File AFile,byte[] buf) throws Exception
 {
  
  FileOutputStream foutstm;
  
  foutstm=new FileOutputStream(AFile);
  try
  {
   foutstm.write(buf);
  }
  finally
  {
   foutstm.flush();
   foutstm.close();
   foutstm=null;
  }
  
 }
 
 //删除文件
 public static boolean DeleteFile(String FileName ) 
 {
  File f;
  
  f=new File(FileName);
  return f.delete();
 }
 //单元测试用main 
 
 public static void main(String[] args)
 {
  int i;
  String s="g:\\mdos71bd.zip";
  File f;
  
  System.out.println(FileTools.ExtractFileName("E:\\javacode\\JCMS 网络发布项目"));
  System.out.println(FileTools.ExtractFileExt(s));
  System.out.println(FileTools.ExtractFilePath(s));
  //splitfile
  try
  {
   //System.out.println("开始分割到E:\\javacode\\JCMS 网络发布项目");
   //FileTools.SplitFile(s,4096,"E:\\javacode\\JCMS 网络发布项目);
   //System.out.println("分割完成");
   //System.out.println("开始合并");
   //f=new File("E:\\javacode\\JCMS 网络发布项目");
   
   //FileTools.CombinFile("E:\\javacode\\JCMS 网络发布项目 网络发布项目");
   
   //System.out.println("合并完成");
   
   
   
   
   //System.out.println("测试完成 累死鸟。。。");
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
  
  
 }
 
 //添加str到文件末尾
 public static void AppendFile(String APathName,String AFileName,String str) throws Exception
 {
  File f;
  FileOutputStream fs;
  
  
  f=new File(APathName,AFileName);
  
  fs=new FileOutputStream(f,true);
  try
  {
   
   fs.write(str.getBytes());
  }
  finally
  {
   fs.close();
   fs=null;
  
  }
 }
 
 
}
阅读(835) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~