接口

/**
 * http 请求服务
 * @author shijx
 * 2010-8-16
 */
public interface HttpService
{
    /**
     * 将HTTP资源另存为文件
     * @param destUrl String
     * @param fileName String
     * @throws Exception
     */
    public void saveToFile(String destUrl, String fileName) throws IOException ;
}
/

实现类

import java.net.URL;

import java.net.HttpURLConnection;

import java.io.BufferedInputStream;
import java.io.FileOutputStream;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * http 请求服务
 */
@Service("httpService")
@Transactional
public class HttpServiceImpl implements HttpService
{

    protected Log logger = LogFactory.getLog(getClass());

    /*<!--http请求保存文件--> 这块是spring bean配置
    <bean id="httpService" class="http.HttpServiceImpl">
        <property name="bufferSize">
            <value>1024</value>
        </property>
    </bean>*/
    private int bufferSize=1024;  // 缓冲区大小

    public int getBufferSize() {
        return bufferSize;
    }

    public void setBufferSize(int bufferSize) {
        this.bufferSize = bufferSize;
    }

    /*private int threadNum;//线程数量

    public int getThreadNum() {
        return threadNum;
    }

    public void setThreadNum(int threadNum) {
        this.threadNum = threadNum;
    }
*/
    /**
     * 构造方法
     */
    public HttpServiceImpl() {
    }

    /**
     * 将HTTP资源另存为文件
     * @param destUrl String
     * @param fileName String
     * @throws Exception
     */
    public void saveToFile(String destUrl, String fileName){
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        HttpURLConnection httpUrl = null;
        URL url = null;
        byte[] buf = new byte[getBufferSize()];
        int size = 0;

        // 建立链接
        try {
            url = new URL(destUrl);
            httpUrl = (HttpURLConnection) url.openConnection();
            // 连接指定的资源
            httpUrl.connect();
            //判断此次http请求是否成功
            if(HttpURLConnection.HTTP_OK==httpUrl.getResponseCode()){
                // 获取网络输入流
                bis = new BufferedInputStream(httpUrl.getInputStream());
                // 建立文件
                fos = new FileOutputStream(fileName);
                logger.info("正在获取链接[" + destUrl + "]的内容,将其保存为文件["+ fileName + "]");
                // 保存文件
                while ((size = bis.read(buf)) != -1){
                    fos.write(buf, 0, size);
                }
                fos.flush();
                fos.close();
                bis.close();
            } else {
                logger.info("正在获取链接[" + destUrl + "]的内容,连接未成功");
            }
            httpUrl.disconnect();
            fos=null;
            bis=null;
            httpUrl=null;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


http读写结束

文件读写开始

接口

/**
 * 文件读写 目录操作
 */
public interface DirectoryOperationService {
    /**
     * 新建目录
     * @param folderPath 目录
     * @return 返回目录创建后的路径
     */
    public String createFolder(String folderPath)throws Exception;
   
    /**
     * 多级目录创建
     * @param folderPath 准备要在本级目录下创建新目录的目录路径 例如 c:myf
     * @param paths 无限级目录参数各级目录以单数线区分 例如 a|b|c
     * @return 返回创建文件后的路径 例如 c:myfac
     */
    public String createFolders(String folderPath, String paths)throws Exception;

   
    /**
     * 新建文件
     * @param filePathAndName 文本文件完整绝对路径及文件名
     * @param fileContent 文本文件内容
     * @return
     */
    public void createFile(String filePathAndName, String fileContent)throws Exception;
    /**
     * 有编码方式的文件创建
     * @param filePathAndName 文本文件完整绝对路径及文件名
     * @param fileContent 文本文件内容
     * @param encoding 编码方式 例如 GBK 或者 UTF-8
     * @return
     */
    public void createFile(String filePathAndName, String fileContent, String encoding)throws Exception;


    /**
     * 删除文件
     * @param filePathAndName 文本文件完整绝对路径及文件名
     * @return Boolean 成功删除返回true遭遇异常返回false
     */
    public boolean delFile(String filePathAndName)throws Exception;


    /**
     * 删除文件夹
     * @param folderPath 文件夹完整绝对路径
     * @return
     */
    public void delFolder(String folderPath)throws Exception;
   
   
    /**
     * 删除指定文件夹下所有文件
     * @param path 文件夹完整绝对路径
     * @return
     * @return
     */
    public boolean delAllFile(String path)throws Exception;


    /**
     * 复制单个文件
     * @param oldPathFile 准备复制的文件源
     * @param newPathFile 拷贝到新绝对路径带文件名
     * @return
     */
    public void copyFile(String oldPathFile, String newPathFile)throws Exception;
   

    /**
     * 复制整个文件夹的内容
     * @param oldPath 准备拷贝的目录
     * @param newPath 指定绝对路径的新目录
     * @return
     */
    public void copyFolder(String oldPath, String newPath)throws Exception;


    /**
     * 移动文件
     * @param oldPath
     * @param newPath
     * @return
     */
    public void moveFile(String oldPath, String newPath)throws Exception;
   

    /**
     * 移动目录
     * @param oldPath
     * @param newPath
     * @return
     */
    public void moveFolder(String oldPath, String newPath)throws Exception;

 /**
     * 读取文本文件内容
     * @param filePathAndName 带有完整绝对路径的文件名
     * @param encoding 文本文件打开的编码方式
     * @return 返回文本文件的内容
     */
    public String readTxt(String filePathAndName,String encoding) throws IOException;
    
    
    /**
     * 获得文件扩展名
     * @param fileName
     * @return
     * @throws Exception
     */
    public  String getExtension(String fileName)throws Exception;
    
    /**
     * 对 a|b 的 目录结构转行成 a/b (File.separator)
     * @param fold
     * @return
     */
    public  String getFoldPath(String fold);
    
    /**
     * 对 a|b 的 目录结构转行成 a/b
     * @param fold
     * @return
     */
    public  String getFoldPathForHttp(String fold);
}

/

实现类

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;  //用到这个工具类

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jeecgframework.core.util.Validate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 文件读写 目录操作
 */
@Service("directoryOperationService")
@Transactional
public class DirectoryOperationServiceImpl implements DirectoryOperationService
{
    protected Log logger = LogFactory.getLog(getClass());
    /**
     * 新建目录
     *
     * @param folderPath 目录
     * @return 返回目录创建后的路径
     */
    public String createFolder(String folderPath) throws Exception{
        String txt = folderPath;
        try {
            java.io.File myFilePath = new java.io.File(txt);
            txt = folderPath;
            if (!myFilePath.exists()) {
                myFilePath.mkdir();
            }
        }catch (Exception e) {
            logger.debug("createFolder ERROR folderPath="+folderPath+" " + e.toString());
            throw new Exception(e.getMessage());
        }
        return txt;
    }

    /**
     * 多级目录创建
     *
     * @param folderPath  准备要在本级目录下创建新目录的目录路径 例如 c:\myf
     * @param paths  无限级目录参数各级目录以单数线区分 例如 a|b|c
     * @return 返回创建文件后的路径 例如 c:\my\a\b\c
     */
    public String createFolders(String folderPath, String paths)throws Exception{
        String txts = folderPath;
        try {
            String txt;
            txts = folderPath;
            StringTokenizer st = new StringTokenizer(paths, "|");
            for (int i = 0; st.hasMoreTokens(); i++) {
                txt = st.nextToken().trim();
                logger.info( "txts="+txts);
                if (txts.lastIndexOf(File.separator) == -1){
                    logger.info(  "== -1 createFolder("+txts +File.separator+ txt+")");
                    txts = createFolder(txts +File.separator+ txt);
                }else {   
                    if(txts.lastIndexOf(File.separator)==(txts.length()-1)){
                        logger.info(  "createFolder("+txts + txt+")");
                        txts = createFolder(txts + txt);
                    }else{
                        logger.info(  "!= -1 createFolder("+txts +File.separator+ txt+")");
                        txts = createFolder(txts +File.separator+ txt);
                    }
                }
            }
        } catch (Exception e){
            logger.info(
                    "createFolders ERROR folderPath="+folderPath+" paths="+paths+" " + e.toString());
            throw new Exception(e.getMessage());
        }
        return txts;
    }

    /**
     * 新建文件
     *
     * @param filePathAndName 文本文件完整绝对路径及文件名
     * @param fileContent  文本文件内容
     * @return
     */
    public void createFile(String filePathAndName, String fileContent)throws Exception
    {

        try {
            String filePath = filePathAndName;
            logger.debug("==========================================================="+filePath);
            filePath = filePath.toString();
            File myFilePath = new File(filePath);
            if (!myFilePath.exists()) {
                myFilePath.createNewFile();
            }
            FileWriter resultFile = new FileWriter(myFilePath);
            PrintWriter myFile = new PrintWriter(resultFile);
            String strContent = fileContent;
            myFile.println(strContent);
            myFile.close();
            resultFile.close();
        } catch (Exception e) {
            logger.debug(
                    "createFile ERROR filePathAndName="+filePathAndName+" " + e.toString());
            throw new Exception(e.getMessage());
        }
    }

    /**
     * 有编码方式的文件创建
     *
     * @param filePathAndName   文本文件完整绝对路径及文件名
     * @param fileContent  文本文件内容
     * @param encoding   编码方式 例如 GBK 或者 UTF-8
     * @return
     */
    public void createFile(String filePathAndName, String fileContent,String encoding) throws Exception
    {

        try {
            String filePath = filePathAndName;
            logger.debug("==========================================================="+filePath);
            filePath = filePath.toString();
            File myFilePath = new File(filePath);
            if (!myFilePath.exists()) {
                myFilePath.createNewFile();
            }
            PrintWriter myFile = new PrintWriter(myFilePath, encoding);
            String strContent = fileContent;
            myFile.println(strContent);
            myFile.flush();
            myFile.close();
            myFile=null;
        } catch (Exception e) {
            logger.debug(
                    "createFile encoding ERROR filePathAndName="+filePathAndName+" " + e.toString());
            throw new Exception(e.getMessage());
        }
    }

    /**
     * 删除文件
     *
     * @param filePathAndName   文本文件完整绝对路径及文件名
     * @return Boolean 成功删除返回true遭遇异常返回false
     */
    public boolean delFile(String filePathAndName)throws Exception
    {
        boolean flag = false;
        try {
            String filePath = filePathAndName;
            File myDelFile = new File(filePath);
            if (myDelFile.exists()) {
                myDelFile.delete();
                flag = true;
            } else {
                flag = false;

            }
        } catch (Exception e) {
            logger.debug(
                    "delFile ERROR filePathAndName="+filePathAndName+" " + e.toString());
            throw new Exception(e.getMessage());
        }
        return flag;
    }

    /**
     * 删除文件夹
     *
     * @param folderPath  文件夹完整绝对路径
     * @return
     */
    public void delFolder(String folderPath)throws Exception{
        try {
            delAllFile(folderPath); // 删除完里面所有内容
            String filePath = folderPath;
            filePath = filePath.toString();
            java.io.File myFilePath = new java.io.File(filePath);
            myFilePath.delete(); // 删除空文件夹
        } catch (Exception e) {
            logger.debug(
                    "delFolder ERROR folderPath="+folderPath+" " + e.toString());
            throw new Exception(e.getMessage());
        }
    }

    /**
     * 删除指定文件夹下所有文件
     *
     * @param path 文件夹完整绝对路径
     * @return
     * @return
     */
    public boolean delAllFile(String path)throws Exception{

        boolean flag = false;
        try{
            File file = new File(path);
            if (!file.exists()) {
                return flag;
            }
            if (!file.isDirectory()) {
                return flag;
            }
            String[] tempList = file.list();
            File temp = null;
            for (int i = 0; i < tempList.length; i++) {
                if (path.endsWith(File.separator)) {
                    temp = new File(path + tempList[i]);
                } else {
                    temp = new File(path + File.separator + tempList[i]);
                }
                if (temp.isFile()) {
                    temp.delete();
                }
                if (temp.isDirectory()) {
                    delAllFile(path + File.separator + tempList[i]);// 先删除文件夹里面的文件
                    delFolder(path + File.separator + tempList[i]);// 再删除空文件夹
                    flag = true;
                }
            }
        }catch(Exception e){
            logger.debug(
                    "delAllFile ERROR path="+path+" " + e.toString());
            throw new Exception(e.getMessage());
        }
        return flag;
    }

    /**
     * 复制单个文件
     *
     * @param oldPathFile
     *            准备复制的文件源
     * @param newPathFile
     *            拷贝到新绝对路径带文件名
     * @return
     */
    public void copyFile(String oldPathFile, String newPathFile)throws Exception{
        try {
            int bytesum = 0;
            int byteread = 0;
            File oldfile = new File(oldPathFile);
            if (oldfile.exists()) { // 文件存在时
                InputStream inStream = new FileInputStream(oldPathFile); // 读入原文件
                FileOutputStream fs = new FileOutputStream(newPathFile);
                byte[] buffer = new byte[1444];
                while ((byteread = inStream.read(buffer)) != -1) {
                    bytesum += byteread; // 字节数 文件大小
                    //System.out.println(bytesum);
                    fs.write(buffer, 0, byteread);
                }
                inStream.close();
            }
        } catch (Exception e) {
            logger.debug(
                    "copyFile ERROR oldPathFile="+oldPathFile+" newPathFile="+newPathFile+" " + e.toString());
            throw new Exception(e.getMessage());
        }
    }

    /**
     * 复制整个文件夹的内容
     *
     * @param oldPath
     *            准备拷贝的目录
     * @param newPath
     *            指定绝对路径的新目录
     * @return
     */
    public void copyFolder(String oldPath, String newPath)throws Exception{
        try {
            new File(newPath).mkdirs(); // 如果文件夹不存在 则建立新文件夹
            File a = new File(oldPath);
            String[] file = a.list();
            File temp = null;
            for (int i = 0; i < file.length; i++) {
                if (oldPath.endsWith(File.separator)) {
                    temp = new File(oldPath + file[i]);
                } else {
                    temp = new File(oldPath + File.separator + file[i]);
                }
                if (temp.isFile()) { //如果是文件
                    FileInputStream input = new FileInputStream(temp);
                    FileOutputStream output = new FileOutputStream(newPath+ File.separator + (temp.getName()).toString()); //写到指定位置
                    byte[] b = new byte[1024 * 5];
                    int len;
                    while ((len = input.read(b)) != -1) { //缓存的读
                        output.write(b, 0, len);          //写
                    }
                    output.flush();
                    output.close();
                    input.close();
                }
                if (temp.isDirectory()) {// 如果是子文件夹
                    copyFolder(oldPath + File.separator + file[i], newPath + File.separator + file[i]); //再次执行当前方法
                }
            }
        } catch (Exception e) {
            logger.debug("copyFolder ERROR oldPath="+oldPath+" newPath="+newPath+" " + e.toString());
            throw new Exception(e.getMessage());
        }
    }

    /**
     * 移动文件
     *
     * @param oldPath
     * @param newPath
     * @return
     */
    public void moveFile(String oldPath, String newPath) throws Exception{
        copyFile(oldPath, newPath);
        delFile(oldPath);
    }

    /**
     * 移动目录
     *
     * @param oldPath
     * @param newPath
     * @return
     */
    public void moveFolder(String oldPath, String newPath)throws Exception{
        copyFolder(oldPath, newPath);
        delFolder(oldPath);
    }

    /**
     * 读取文本文件内容
     *
     * @param filePathAndName
     *            带有完整绝对路径的文件名
     * @param encoding
     *            文本文件打开的编码方式
     * @return 返回文本文件的内容
     */
    public String readTxt(String filePathAndName, String encoding)throws IOException {
        encoding = encoding.trim();
        StringBuffer str = new StringBuffer("");
        String st = "";
        try {
            FileInputStream fs = new FileInputStream(filePathAndName);
            InputStreamReader isr;
            if (encoding.equals("")) {
                isr = new InputStreamReader(fs);
            } else {
                isr = new InputStreamReader(fs, encoding);
            }
            BufferedReader br = new BufferedReader(isr);
            try {
                String data = "";
                while ((data = br.readLine()) != null) {
                    str.append(data + " ");
                }
            } catch (Exception e) {
                str.append(e.toString());
            }
            st = str.toString();
        } catch (IOException es) {
            st = "";
        }
        return st;
    }


    /**
     * 获得文件扩展名
     * @param fileName
     * @return
     * @throws Exception
     */
    public  String getExtension(String fileName)throws Exception{
        String ext="";
        if ((fileName != null) && (fileName.length() > 0)) {
            int i = fileName.lastIndexOf('.');

            if ((i > 0) && (i < (fileName.length() - 1))){
                ext=fileName.substring(i + 1);
            }else{
                throw new Exception("无法获得扩展名");
            }
        }else{
            throw new Exception("无法获得扩展名");
        }
        return ext;
    }

    /**
     * 对 a|b 的 目录结构转行成 a/b (File.separator)
     * @param fold
     * @return
     */
    public  String getFoldPath(String fold)
    {
        if(Validate.isEmpty(fold)){
            return "";
        }
        if(fold.indexOf("|")==-1){
            return fold;
        }
        StringTokenizer st = new StringTokenizer(fold, "|");
        String back="";
        for (int i = 0; st.hasMoreTokens(); i++) {
            if(i!=0){
                back=back+File.separator;
            }
            back=back+st.nextToken().trim();
            logger.info("+++++++++++++++++++++++++++++++++++"+back);
        }

        return back;
    }


    /**
     * 对 a|b 的 目录结构转行成 a/b
     * @param fold
     * @return
     */
    public  String getFoldPathForHttp(String fold){
        if(Validate.isEmpty(fold)){
            return "";
        }

        if(fold.indexOf("|")==-1){
            return fold;
        }
        StringTokenizer st = new StringTokenizer(fold, "|");
        String back="";
        for (int i = 0; st.hasMoreTokens(); i++) {
            if(i!=0)
            {
                back=back+"/";
            }
            back=back+st.nextToken().trim();
        }
        return back;
    }

}