/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package phc.mes.bean;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

/**
 *
 * @author angel
 */
public class fileOperation {

    /** Creates a new instance of fileOperation */
    public fileOperation() {
    }
   
    /**创建文件夹

     * @param path  目录

     */

    public void createDir(String path){

        File dir=new File(path);

        if(!dir.exists())

            dir.mkdir();

    }
    /**创建新文件

     * @param path 目录

     * @param filename 文件名

     * @throws IOException

     */

    public void createFile(String path,String filename) throws IOException{         File file=new File(path+"/"+filename);

        if(!file.exists())

            file.createNewFile();

    }
   
    /**删除文件

     * @param path 目录

     * @param filename 文件名

     */

    public void delFile(String path,String filename){

        File file=new File(path+"/"+filename);

        if(file.exists()&&file.isFile())

            file.delete();

    }
   
    /**获得控制台用户输入的信息

     * @return

     * @throws IOException

     */

     public String getInputMessage() throws IOException{

        System.out.println("请输入您的命令∶");

        byte buffer[]=new byte[1024];

        int count=System.in.read(buffer);

        char[] ch=new char[count-2];//最后两位为结束符,删去不要

        for(int i=0;i<count-2;i++)

            ch[i]=(char)buffer[i];

            String str=new String(ch);

            return str;

    }/** */
    
     /**以文件流的方式复制文件

     * @param src 文件源目录

     * @param dest 文件目的目录

     * @throws IOException 

     */

     public void copyFile(String src,String dest) throws IOException{

        FileInputStream in=new FileInputStream(src);

        File file=new File(dest);

        if(!file.exists())

            file.createNewFile();

        FileOutputStream out=new FileOutputStream(file);

        int c;

        byte buffer[]=new byte[1024];

        while((c=in.read(buffer))!=-1)
        {

            for(int i=0;i<c;i++)

                out.write(buffer[i]);       
        }

        in.close();

        out.close();

    }/** */
    
     /**

     * 文件输出示例

     */

    public void PrintStreamDemo(){

        try{

            FileOutputStream out=new FileOutputStream("D:/test.txt");

            PrintStream p=new PrintStream(out);

            for(int i=0;i<10;i++)

                p.println("This is "+i+" line");

        } catch (FileNotFoundException e){

            e.printStackTrace();

        }
    }
   
    public void StringBufferDemo() throws IOException{

        File file=new File("/root/sms.log");

        if(!file.exists())

            file.createNewFile();

        FileOutputStream out=new FileOutputStream(file,true);      

         for(int i=0;i<10000;i++){

            StringBuffer sb=new StringBuffer();

            sb.append("这是第"+i+"行:前面介绍的各种方法都不关用,为什么总是奇怪的问题 ");

            out.write(sb.toString().getBytes("utf-8"));

        }       

        out.close();
    }
   
    /**文件重命名

     * @param path 文件目录

     * @param oldname  原来的文件名

     * @param newname 新文件名

     */

    public void renameFile(String path,String oldname,String newname){

        if(!oldname.equals(newname)){//新的文件名和以前文件名不同时,才有必要进行重命名

            File oldfile=new File(path+"/"+oldname);

            File newfile=new File(path+"/"+newname);

            if(newfile.exists())//若在该目录下已经有一个文件和新文件名相同,则不允许重命名

                System.out.println(newname+"已经存在!");

            else{

                oldfile.renameTo(newfile);
            }

        }        

    }
   
    /**转移文件目录

     * @param filename 文件名

     * @param oldpath 旧目录

     * @param newpath 新目录

     * @param cover 若新目录下存在和转移文件具有相同文件名的文件时,是否覆盖新目录下文件,cover=true将会覆盖原文件,否则不操作

     */

     public void changeDirectory(String filename,String oldpath,String newpath,boolean cover){
         if(!oldpath.equals(newpath)){

            File oldfile=new File(oldpath+"/"+filename);

            File newfile=new File(newpath+"/"+filename);

            if(newfile.exists()){//若在待转移目录下,已经存在待转移文件

                if(cover)
                    oldfile.renameTo(newfile);
                else
                    System.out.println("在新目录下已经存在:"+filename);
            }
            else{
                oldfile.renameTo(newfile);
            }
        }
    }
    
     /**读文件

     * @param path

     * @return

     * @throws IOException

     */

    public String FileInputStreamDemo(String path) throws IOException{

        File file=new File(path);

        if(!file.exists()||file.isDirectory())

            throw new FileNotFoundException();

        FileInputStream fis=new FileInputStream(file);

        byte[] buf = new byte[1024];

        StringBuffer sb=new StringBuffer();

        while((fis.read(buf))!=-1){

            sb.append(new String(buf));   

            buf=new byte[1024];//重新生成,避免和上次读取的数据重复

        }

        return sb.toString();
    }
    public String BufferedReaderDemo(String path) throws IOException{

        File file=new File(path);

        if(!file.exists()||file.isDirectory())

            throw new FileNotFoundException();

        BufferedReader br=new BufferedReader(new FileReader(file));

        String temp=null;

        StringBuffer sb=new StringBuffer();

        temp=br.readLine();

        while(temp!=null){

            sb.append(temp+" ");

            temp=br.readLine();

        }

        return sb.toString();

    }
   
    /**从目录中读取xml文件

     * @param path 文件目录

     * @return

     * @throws DocumentException

     * @throws IOException

     */

    public Document readXml(String path) throws DocumentException, IOException{
        File file=new File(path);
        BufferedReader bufferedreader = new BufferedReader(new FileReader(file));
        SAXReader saxreader = new SAXReader();
        Document document = (Document)saxreader.read(bufferedreader);
        bufferedreader.close();
        return document;
    }
   
}