gistfile1.txt /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */package cn.huawei.com.CompressedSeacher.util;i
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package cn.huawei.com.CompressedSeacher.util; import cn.huawei.com.CompressedSeacher.view.com.impl.FileListTableImpl; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileChannel.MapMode; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * ** * * @author l00358914 */ public class FileUtils { private static FileUtils instance = new FileUtils(); private FileUtils() { } public static FileUtils getInstance() { return instance; } private static StringBuffer sb = new StringBuffer(); /** * 将文本文件中的内容读入到buffer中 * * @param buffer buffer * @param filePath 文件路径 * @throws IOException 异常 * @author cn.outofmemory * */ public static void readToBuffer(StringBuffer buffer, String filePath) throws IOException { InputStream is = new FileInputStream(filePath); String line; // 用来保存每行读取的内容 BufferedReader reader = new BufferedReader(new InputStreamReader(is)); line = reader.readLine(); // 读取第一行 while (line != null) { // 如果 line 为空说明读完了 buffer.append(line); // 将读到的内容添加到 buffer 中 buffer.append("\n"); // 添加换行符 line = reader.readLine(); // 读取下一行 } reader.close(); is.close(); } /** * 读取文本文件内容 * * @param filePath 文件所在路径 * @return 文本内容 * @throws IOException 异常 * @author cn.outofmemory * */ public static String readFile(String filePath) throws IOException { StringBuffer sb = new StringBuffer(); FileUtils.readToBuffer(sb, filePath); return sb.toString(); } public static void fileChannelCopy(File s, File t) { FileInputStream fi = null; FileOutputStream fo = null; FileChannel in = null; FileChannel out = null; try { fi = new FileInputStream(s); fo = new FileOutputStream(t); in = fi.getChannel();//得到对应的文件通道 out = fo.getChannel();//得到对应的文件通道 in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道 } catch (IOException e) { e.printStackTrace(); } finally { try { fi.close(); in.close(); fo.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * ** * java IO方式 * * @param f1 * @param f2 * @return * @throws Exception */ public static long copyFile_IO(File f1, File f2) throws Exception { long time = new Date().getTime(); int length = 2097152; FileInputStream in = new FileInputStream(f1); FileOutputStream out = new FileOutputStream(f2); byte[] buffer = new byte[length]; while (true) { int ins = in.read(buffer); if (ins == -1) { in.close(); out.flush(); out.close(); return new Date().getTime() - time; } else { out.write(buffer, 0, ins); } } } /** * ** * 使用NIO中的管道到管道传输 * * @param f1 * @param f2 * @return * @throws Exception */ public static long copyFile_NIO2Channel(File f1, File f2) throws Exception { long time = new Date().getTime(); int length = 2097152; FileInputStream in = new FileInputStream(f1); FileOutputStream out = new FileOutputStream(f2); FileChannel inC = in.getChannel(); FileChannel outC = out.getChannel(); int i = 0; while (true) { if (inC.position() == inC.size()) { inC.close(); outC.close(); return new Date().getTime() - time; } if ((inC.size() - inC.position()) < 20971520) { length = (int) (inC.size() - inC.position()); } else { length = 20971520; } inC.transferTo(inC.position(), length, outC); inC.position(inC.position() + length); i++; } } /**** * * * @param f1 * @param f2 * @return * @throws Exception */ public static long copyFile_memoryImage(File f1, File f2) throws Exception { long time = new Date().getTime(); int length = 2097152; FileInputStream in = new FileInputStream(f1); RandomAccessFile out = new RandomAccessFile(f2, "rw"); FileChannel inC = in.getChannel(); MappedByteBuffer outC = null; MappedByteBuffer inbuffer = null; byte[] b = new byte[length]; while (true) { if (inC.position() == inC.size()) { inC.close(); outC.force(); out.close(); return new Date().getTime() - time; } if ((inC.size() - inC.position()) < length) { length = (int) (inC.size() - inC.position()); } else { length = 20971520; } b = new byte[length]; inbuffer = inC.map(MapMode.READ_ONLY, inC.position(), length); inbuffer.load(); inbuffer.get(b); outC = out.getChannel().map(MapMode.READ_WRITE, inC.position(), length); inC.position(b.length + inC.position()); outC.put(b); outC.force(); } } /** * ** * 管道对管道 * * @param f1 * @param f2 * @return * @throws Exception */ public static long copyFile_Channel2Channel(File f1, File f2) throws Exception { long time = new Date().getTime(); int length = 2097152; FileInputStream in = new FileInputStream(f1); FileOutputStream out = new FileOutputStream(f2); FileChannel inC = in.getChannel(); FileChannel outC = out.getChannel(); ByteBuffer b = null; while (true) { if (inC.position() == inC.size()) { inC.close(); outC.close(); return new Date().getTime() - time; } if ((inC.size() - inC.position()) < length) { length = (int) (inC.size() - inC.position()); } else { length = 2097152; } b = ByteBuffer.allocateDirect(length); inC.read(b); b.flip(); outC.write(b); outC.force(false); } } /** * 循环创建父目录,正则表达式方式 * * @param outFileName */ public static void createFatherDir(String outFileName) { // 匹配分隔符 Pattern p = Pattern.compile("[/\\" + File.separator + "]"); Matcher m = p.matcher(outFileName); // 每找到一个匹配的分隔符,则创建一个该分隔符以前的目录 while (m.find()) { int index = m.start(); String subDir = outFileName.substring(0, index); File subDirFile = new File(subDir); if (!subDirFile.exists()) { subDirFile.mkdir(); System.out.println("目录创建完成:" + subDir); } } } public static void main(String[] args) { try { createFatherDir("D:\\decompileFolder\\tomcat-websocket.src\\META-INF\\test\\huawei\\web-fragment.xml"); fileChannelCopy(new File("D:\\decompileFolder\\tomcat-websocket.jar\\META-INF\\web-fragment.xml"), new File("D:\\decompileFolder\\tomcat-websocket.src\\META-INF\\test\\huawei\\web-fragment.xml")); // copyFile_NIO2Channel(new File("D:\\decompileFolder\\tomcat-websocket.jar\\META-INF/web-fragment.xml"),new File("D:\\decompileFolder\\tomcat-websocket.src\\META-INF/web-fragment.xml")); // copyFile_memoryImage(new File("D:\\decompileFolder\\tomcat-websocket.jar\\META-INF/web-fragment.xml"),new File("D:\\decompileFolder\\tomcat-websocket.src\\META-INF/web-fragment.xml")); // copyFile_Channel2Channel(new File("D:\\decompileFolder\\tomcat-websocket.jar\\META-INF/web-fragment.xml"),new File("D:\\decompileFolder\\tomcat-websocket.src\\META-INF/web-fragment.xml")); } catch (Exception ex) { Logger.getLogger(FileUtils.class.getName()).log(Level.SEVERE, null, ex); } } }