(JAVA)文件读写辅助类

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * 文件读写辅助类
 *
 * @since 2012-03-17
 *
 */
public class FileUtils {
 /**
  * 复制单个文件
  *
  * @param oldFile
  *            :File
  * @param newPath
  *            :String 文件路径
  */
 public static void copyFile(File oldFile, String newPath) {

  Long starttime = System.currentTimeMillis();

  InputStream inStream = null;
  FileOutputStream fout = null;

  try {
   int bytesum = 0;
   int byteread = 0;

   if (oldFile.exists()) { // 文件存在时
    inStream = new FileInputStream(oldFile); // 读入原文件
    
    File file = new File(newPath.substring(0, newPath.lastIndexOf("\\")));
    //文件不存在时,建文件
    if(!file.exists()) {
     file.mkdirs();
    }
    
    fout = new FileOutputStream(newPath);

    byte[] buffer = new byte[1024];

    while ((byteread = inStream.read(buffer)) != -1) {
     bytesum += byteread; // 字节数 文件大小
     fout.write(buffer, 0, byteread);
    }

    fout.flush();

   }
  } catch (Exception e) {
   System.out.println("复制文件【" + oldFile.getAbsolutePath() + "】时出错!");
   e.printStackTrace();

  } finally {
   try {
    // 关闭输入流
    if (inStream != null) {
     inStream.close();
    }

    // 关闭输出流
    if (fout != null) {
     fout.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

  Long endtime = System.currentTimeMillis();
  System.out.println("复制【" + oldFile.getAbsolutePath() + " 】用时【"
    + (endtime - starttime) + "】毫秒!");
 }

 /**
  * 复制单个文件
  *
  * @param inStream
  *            :輸入流
  * @param newPath
  *            :String 文件路径
  */
 public static void copyFile(InputStream inStream, String newPath) {

  FileOutputStream fout = null;

  try {
   int bytesum = 0;
   int byteread = 0;
   File file = new File(newPath.substring(0, newPath.lastIndexOf("\\")));
   
   //文件不存在时,建文件
   if(!file.exists()) {
    file.mkdirs();
   }
   
   fout = new FileOutputStream(newPath);

   byte[] buffer = new byte[1024];

   while ((byteread = inStream.read(buffer)) != -1) {
    bytesum += byteread; // 字节数 文件大小
    fout.write(buffer, 0, byteread);
   }

   fout.flush();

  } catch (Exception e) {
   e.printStackTrace();

  } finally {
   try {
    // 关闭输入流
    if (inStream != null) {
     inStream.close();
    }

    // 关闭输出流
    if (fout != null) {
     fout.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

 /**
  * 复制文件夹
  *
  * @param oldPath
  *            :String 文件路径
  * @param newPath
  *            :String 文件路径
  */
 public static void copyFolder(String oldPath, String newPath) {

  try {
   (new File(newPath)).mkdirs(); // 如果文件夹不存在 则建立新文件夹
   File oldfiles = new File(oldPath);
   String[] file = oldfiles.list();// 循环时用于存放临时的文件列表
   File tempfile = null;// 存放临时文件

   for (int i = 0; i < file.length; i++) {
    // 循环拿到文件夹下的每个文件
    if (oldPath.endsWith(File.separator)) {
     tempfile = new File(oldPath + file[i]);
    } else {
     tempfile = new File(oldPath + File.separator + file[i]);
    }

    // 是文件,就直接拷文件
    if (tempfile.isFile()) {
     copyFile(tempfile, newPath + "/"
       + (tempfile.getName()).toString());
    }

    // 是文件夾,继续循环拷文件夹
    if (tempfile.isDirectory()) {
     copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
    }
   }
  } catch (Exception e) {
   System.out.println("复制文件夹【" + oldPath + "】时出错!");
   e.printStackTrace();

  }

 }
 
 /**
  * 下载项目里面的文件
  *
  * @param request
  * @param response
  */
 public static void doDownFile(HttpServletRequest request,
   HttpServletResponse response, String filePath, String fileRealName) {
  InputStream ins = null;
  ServletOutputStream toClient = null;
  File file = null;

  // 从页面读取文件路径
  if (filePath != null) {
   try {
    file = new File(request.getRealPath("/") + filePath);
    if (file.exists()) {
     ins = new FileInputStream(file);
    }
   } catch (FileNotFoundException e) {
    e.printStackTrace();
    System.out.println("文件不存在!");
   }

   response.reset();

   // 得到保存的文件名
   String filename = null;
   try {
    /*filename = new String(filePath.substring(
      filePath.lastIndexOf("\\") + 1).getBytes("GBK"),
      "ISO-8859-1");*/
    filename = new String(fileRealName.getBytes("GBK"),"ISO-8859-1");
    
    response.setHeader("Content-disposition",
      "attachment;filename=" + filename);

    response.setContentType("application/x-msdownload");

    response.setContentType("application/octet-stream;charset=GBK");

    // 解决在弹出文件下载框不能打开文件的问题
    response.addHeader("Content-Disposition",
      "attachment; filename="
        + URLEncoder.encode(filename, "GBK"));

   } catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
    System.out.println("文件名转码时出错!");
   }

   BufferedInputStream bis = new BufferedInputStream(ins);
   try {
    // 得到客户端输出流
    toClient = response.getOutputStream();

    byte[] b = new byte[8192];
    int len = 0;

    while ((len = bis.read(b)) != -1) {
     // 向客户端写文件
     toClient.write(b, 0, len);
    }
   } catch (IOException e) {
    e.printStackTrace();
    System.out.println("文件读取时出错!");
   } finally {
    // 关闭流
    try {
     if (bis != null) {
      bis.close();
     }
     if (ins != null) {
      ins.close();
     }
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
 
 
 /**
  * 删除文件夹辅助方法
  *
  * @param filePath
  * @return
  */
 public static void deleteFile(String filePath) {
  // boolean flag = false;
  File file = new File(filePath);
  // 判断目录或文件是否存在
  if (!file.exists()) { // 不存在返回 false
   // return flag;
  } else {
   // 判断是否为文件
   if (file.isFile()) { // 为文件时调用删除文件方法
    file.delete();
   } else { // 为目录时调用删除目录方法
    File[] files = file.listFiles();
    for (int i = 0; i < files.length; i++) {
     // 刪除子文件夾
     deleteFile(files[i].getAbsolutePath());
    }
   }
  }
 }
}


本文已在版权印备案,如需转载请访问版权印。86818759

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • apache下的httpclient工具可大大简化开发过程中的点对点通信,本人将以微信多媒体接口为例,展示http...
    划破的天空阅读 5,266评论 0 32
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 10,015评论 2 95
  • 2017.08.14星期一晴转雨农历闰六月二十三 下午宝宝醒来照例带她烦楼下溜达,宝宝现在走路总是踉踉跄跄的,让我...
    小幸福vs茹萍阅读 107评论 0 0