JAVA操作文件

/*

*/
package com.***.app.mappcore.impl.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

import com.ygsoft.ecp.service.log.EcpLogFactory;
import com.ygsoft.ecp.service.log.IEcpLog;
import com.ygsoft.ecp.service.tool.StringUtil;

/**
 * 文件处理.<br>
 *
 * @author mapengfei <br>
 * @version 1.0.0 2016年4月14日<br>
 * @see
 * @since JDK 1.5.0
 */
public class ForderUtil {
    /**
     * 日志
     */
    private static final IEcpLog LOG = EcpLogFactory.getLog(ForderUtil.class);

/**
     * 服务的基准路径.
     */
    private static String BASE_PATH = SystemConfigUtil.get("SERVER_BASE_HOME", "FTP") + "\\ecpCloudServer\\wlp";
    /**
     * 服务节点的路径.
     */
    private static String SERVER_PATH = BASE_PATH + "\\usr\\servers";

/**
     * 根据路径删除指定的目录或文件,无论存在与否
     *
     * @param sPath
     *            要删除的目录或文件
     * @return 删除成功返回 true,否则返回 false。
     */
    public static boolean deleteFolder(final String sPath) {
        boolean flag = false;
        File file = new File(sPath);
        // 判断目录或文件是否存在
        if (!file.exists()) { // 不存在返回 false
            return flag;
        } else {
            // 判断是否为文件
            if (file.isFile()) { // 为文件时调用删除文件方法
                return deleteFile(sPath);
            } else { // 为目录时调用删除目录方法
                return deleteDirectory(sPath);
            }
        }
    }

/**
     * 删除目录(文件夹)以及目录下的文件
     *
     * @param sPath
     *            被删除目录的文件路径
     * @return 目录删除成功返回true,否则返回false
     */
    private static boolean deleteDirectory(String sPath) {
        // 如果sPath不以文件分隔符结尾,自动添加文件分隔符
        if (!sPath.endsWith(File.separator)) {
            sPath = sPath + File.separator;
        }
        File dirFile = new File(sPath);
        // 如果dir对应的文件不存在,或者不是一个目录,则退出
        if (!dirFile.exists() || !dirFile.isDirectory()) {
            return false;
        }
        boolean flag = true;
        // 删除文件夹下的所有文件(包括子目录)
        File[] files = dirFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            // 删除子文件
            if (files[i].isFile()) {
                flag = deleteFile(files[i].getAbsolutePath());
                if (!flag)
                    break;
            } // 删除子目录
            else {
                flag = deleteDirectory(files[i].getAbsolutePath());
                if (!flag)
                    break;
            }
        }
        if (!flag)
            return false;
        // 删除当前目录
        if (dirFile.delete()) {
            return true;
        } else {
            return false;
        }
    }

/**
     * 删除单个文件
     *
     * @param sPath
     *            被删除文件的文件名
     * @return 单个文件删除成功返回true,否则返回false
     */
    private static boolean deleteFile(final String sPath) {
        boolean flag = false;
        File file = new File(sPath);
        // 路径为文件且不为空则进行删除
        if (file.isFile() && file.exists()) {
            file.delete();
            flag = true;
        }
        return flag;
    }

/**
     * 文件通道复制方案
     *
     * @param s
     * @param t
     */
    public static void fileChannelCopy(final File from, final File to) {
        // 文件输入流
        FileInputStream fi = null;
        // 文件输出流
        FileOutputStream fo = null;
        // 输入通道
        FileChannel in = null;
        // 输出通道
        FileChannel out = null;
        try {
            // 读取流
            fi = new FileInputStream(from);
            // 输出流
            fo = new FileOutputStream(to);
            // 取得文件流通道
            in = fi.getChannel();
            out = fo.getChannel();
            // 通道连接
            in.transferTo(0, in.size(), out);
        } catch (FileNotFoundException e) {
            // 创建读出流异常
            e.printStackTrace();
        } catch (IOException e) {
            // 通道联通出现异常
            e.printStackTrace();
        } finally {
            try {
                fi.close();
                in.close();
                fo.close();
                out.close();
            } catch (IOException e) {
                // 流关闭异常
                e.printStackTrace();
            }

}
    }

/**
     * 从fromPath复制文件及目录到toPath
     *
     * @param fromPath
     *            母体文件路径
     * @param toPath
     *            目标文件路径
     * @param isZip
     *            压缩标示
     * @param zipPath
     *            zip压缩后的路径(该参数与isZip联合使用)
     */
    public static void copyFile(String fromPath, String toPath, final String zipPath, final boolean isZip) {
        // 如果sPath不以文件分隔符结尾,自动添加文件分隔符
        if (!fromPath.endsWith(File.separator)) {
            fromPath = fromPath + File.separator;
        }
        File dirFile = new File(fromPath);
        mkdirsFileByPath(toPath);
        if (dirFile.isDirectory()) {
            // 复制文件夹下的所有文件(包括子目录)
            File[] files = dirFile.listFiles();
            for (int i = 0; i < files.length; i++) {
                File f = files[i];
                // 如果是文件
                if (f.isFile()) {
                    File toFile = new File(toPath + "\\" + f.getName());
                    fileChannelCopy(f, toFile);
                } else {
                    toPath = toPath + "\\" + f.getName();
                    mkdirsFileByPath(toPath);
                }
            }
        } else {
            File toFile = new File(toPath + "\\" + dirFile.getName());
            fileChannelCopy(dirFile, toFile);

}
        if (isZip && StringUtil.isNotEmptyString(zipPath)) {
            try {
                if (LOG.isDebugEnabled()) {
                    LOG.debug("开始压缩日志文件,压缩后的文件路径为" + fromPath + "\\" + "log.zip");
                }
                File zipFile = new File(zipPath);
                if (zipFile.exists()) {
                    ForderUtil.deleteFolder(zipPath);
                }
                ZipMultiFile.zip(zipPath, "", toPath);
                ForderUtil.deleteFolder(toPath);
            } catch (Exception e) {
                if (LOG.isDebugEnabled()) {
                    LOG.info("ForderUtil.copyFile压缩文件过程中失败");
                }
                e.printStackTrace();
            }
        } else {
            if (LOG.isDebugEnabled()) {
                LOG.info("ForderUtil.copyFile方法压缩标示为false或压缩路径为null" + zipPath);
            }
        }
    }

/**
     * 取得LOG日志压缩文件
     *
     * @param zipPath
     * @param mappName
     * @return
     */
    public static String getLogZip(final String mappName) {
        String toPath = SERVER_PATH + "\\" + mappName + "\\log";
        String fromPath = SERVER_PATH + "\\" + mappName + "\\logs\\console.log";
        String zipPath = SERVER_PATH + "\\" + mappName + "\\log.zip";
        copyFile(fromPath, toPath, zipPath, true);
        return zipPath;
    }

/**
     * 自动创建path
     *
     * @param path
     * @return
     */
    private static void mkdirsFileByPath(final String path) {
        File toFile = new File(path);
        if (!toFile.exists()) {
            toFile.mkdirs();
        }
    }

public static void main(final String[] args) throws Exception {
        String from = "D:\\ygecpcloud\\ecpCloudServer\\wlp\\usr\\servers\\mappstore\\logs";
        String to = "D:\\ygecpcloud\\ecpCloudServer\\wlp\\usr\\servers\\mappstore\\log";
        copyFile(from, to, "D:\\ygecpcloud\\ecpCloudServer\\wlp\\usr\\servers\\mappstore\\l.zip", true);
    }

}

时间: 2024-11-09 16:13:30

JAVA操作文件的相关文章

java——操作文件

Java文件操作,共实现了文件复制(单个文件和多层目录文件),文件移动(单个文件和多层目录文件),文件删除(单个文件和多层目录文件),文件压缩 (单个文件),文件解压(单个文件),文件分割(将一个大文件分割为若干个小文件),文件组合(将多个文件组合到一个文件中). package ttstudy.io; import java.io.*; import java.util.*; import java.util.zip.*; public class FileManager { private 

Java删除文件夹和文件

Java删除文件夹和文件 以前在javaeye看到过关于Java操作文件的一篇文章,写的很好,但找了半天也没找到,就把找到底几篇文章整理一下,做个总结,算是一个学习备份…… 1,验证传入路径是否为正确的路径名(Windows系统,其他系统未使用) Java代码 // 验证字符串是否为正确路径名的正则表达式 private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*"; // 通过 sPath.matches(

JAVA操作properties文件

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便.一.properties文件test.properties------------------------------------------------------###########

Java的文件读写操作

当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader.其中最重要的类是InputStreamReader, 它是字节转换为字符的桥梁.你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等.使用FileReader读取文件: [java] view plain copy FileReader fr = new FileReader("ming.txt");

Java api 入门教程 之 JAVA的文件操作

I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本能力.本章IO类的使用就从读写文件开始. 1 文件操作 文件(File)是 最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件.声音文件等数据文件,也经常需要根据需要从指定的文件中进行数据的读取.当然, 在实际使用时,文件都包含一个的格式,这个格式需要程序员根据需要进行设计,读取已

java file文件类操作使用方法大全

1.构造函数 [java] view plaincopy public class FileDemo { public static void main(String[] args){ //构造函数File(String pathname) File f1 =new File("c:\\zuidaima\\1.txt"); //File(String parent,String child) File f2 =new File("c:\\zuidaima",&quo

java FileStream文件流操作

直接上代码,函数使用说明详见Java API文档 import java.io.*; public class StreamDemo { public static void main(String[] args) { File f=new File("F:\\workspace\\JavaPrj\\test.txt"); FileOutputStream out=null; try { out=new FileOutputStream(f); byte[] b=new String(

java中文件操作《一》

在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File.inputStream.outputStream.FileInputStream.FileOutputStream.reader.writer.FileReader.FileWriter等等,其中对文件的操作又分为两大类,一类是字符流,一类是字节流.所谓的字符流是以字节(8b)为单位进行读/写,字符流即使用字符为单位读/写,java使用unicode编码,一个字符两个字节,下面分别对

java操作office和pdf文件java读取word,excel和pdf文档内容

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.zip