Paginas

miércoles, 5 de enero de 2011

JAVA, Clase para manipular archivos planos (TXT, LOGS, EXCEPCIONES)

Cualquier inquietud no duden en preguntar !!!

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/***
 * Clase que controla la manipulacion de un archivo plano
 * @author Diego Fernando Carvajal Rodriguez
 * @version 001
 * @see ###############
 * @since 02/11/2010 - JDK 1.6
 */


public class clPlano {
    private final String sDrccionCnfgrcion = "DIRECCION DE CARPETAS/Logs.txt";
    private File flArchvo;
    private FileReader frLeeArchvo;
    private String sDscpcionError;
    private List <String> lsLctra;
    private FileWriter fwEscrbe;
    private BufferedWriter bwBffer;
    private PrintWriter pwImprme;
    private BufferedReader brBffer;
    private String sDrccion;
    private int iCont;
    private char cCrcter;
    private String arsNmbre[];
    private String sRta;
    private String sRtaFnal;
    private File flNmbreNvo;
    private File flArchvoRtrno;
    private boolean bCntrl;
    private String sNmbreTmpral;
    private String arsRta[];
    private String sNvaRta;
    private String sFchaTmpo;
    private Calendar cClndrio;
    private String sDia;
    private String sMes;
    private String sAnnio;
    private String sHra;
    private String sMnto;
    private String sSgndo;
    private boolean bEstdo;
    private File flDrctrio;
    private Process pPrcso;
    private String sCmndo;
    private String sNmbreArchvo;
    private List <String> lsCntndo;
    private File flLgs;
    private String arsAyda[];
    public clPlano(){
        this.flArchvo = null;
        this.frLeeArchvo = null;
        this.sDscpcionError = "";
        this.lsLctra = new ArrayList();
        this.fwEscrbe = null;
        this.bwBffer = null;
        this.pwImprme = null;
        this.brBffer = null;
        this.sDrccion = "";
        this.iCont = 0;
        this.cCrcter = ' ';
        this.arsNmbre = null;
        this.sRta = "";
        this.sRtaFnal = "";
        this.flNmbreNvo = null;
        this.flArchvoRtrno = null;
        this.bCntrl = false;
        this.sNmbreTmpral = "";
        this.arsRta = null;
        this.sNvaRta = "";
        this.sFchaTmpo = "";
        this.cClndrio = null;
        this.sDia = "";
        this.sMes = "";
        this.sAnnio = "";
        this.sHra = "";
        this.sMnto = "";
        this.sSgndo = "";
        this.bEstdo = true;
        this.flDrctrio = null;
        this.pPrcso = null;
        this.sCmndo = null;
        this.sNmbreArchvo = "";
        this.lsCntndo = new ArrayList();
        this.flLgs = null;
        this.arsAyda = null;
    }
    public String getsDscpcionError() {
        return this.sDscpcionError;
    }
    public synchronized List <String> getLsLctra() {
        return this.lsLctra;
    }
    /***
     * Metodo que controla el medio
     * @param iOpcion 1 == creacion de archivo plano; 2 == Lectura de archivo plano
     * @param bCnfgrcion true == Carga ruta del fichero de configuracion e ignora el parametro sDrccionArchvo; false = Carga el fichero que se encuentra en sDrccionArchvo
     * @param sDrccionArchvo Ruta del fichero que desea procesar
     * @param lsCntndo Lista con el contenido que va a tener el archivo plano
     * @param bCntnuaCntndo true == Adiciona el contenido al final del archivo plano existente; false == Adiciona el contenido reemplazando toda la informacion del archivo plano existente
     * @return boolean true == proceso exitoso; false == falla en el proceso
     */
    public synchronized boolean fnbProceso(int iOpcion, boolean bCnfgrcion, String sDrccionArchvo, List <String> lsCntndo, boolean bCntnuaCntndo){
        this.bEstdo = true;
        switch(iOpcion){
            case 1://Creacion de archivo
                this.bEstdo = fnbCreaPlano(bCnfgrcion, sDrccionArchvo, lsCntndo, bCntnuaCntndo);
                break;
            case 2://Lectura de archivo
                this.bEstdo = fnbLeePlano(bCnfgrcion, sDrccionArchvo);
                break;
            default:
                this.bEstdo = false;
                break;
        }
        return this.bEstdo;
    }
    /***
     * Metodo que carga el archivo plano en meoria para ser procesado
     * @param bCnfgrcion true == Carga ruta del fichero de configuracion e ignora el parametro sDrccionArchvo; false == Carga el fichero que se encuentra en sDrccionArchvo
     * @param sDrccionArchvo Ruta del fichero que desea procesar
     * @return boolean true == proceso exitoso; false == falla en el proceso
     */
    private boolean fnbCargaArchivo(boolean bCnfgrcion, String sDrccionArchvo){
        this.bEstdo = true;
        this.sDrccion = "";
        if(bCnfgrcion){
            this.sDrccion = this.sDrccionCnfgrcion;
        }else{
            this.sDrccion = fnsAjustaRuta2(sDrccionArchvo);
        }
        try {
            this.flArchvo = new File(this.sDrccion);
            this.bEstdo = this.flArchvo.exists();
            if(this.bEstdo)
                this.frLeeArchvo = new FileReader(this.flArchvo);
        } catch (FileNotFoundException ex) {
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbCargaArchivo");
            this.bEstdo = false;
        }
        return this.bEstdo;
    }
    /***
     * Metodo que permite crear un archivo plano
     * @param bCnfgrcion true == Carga ruta del fichero de configuracion e ignora el parametro sDrccionArchvo; false = Carga el fichero que se encuentra en sDrccionArchvo
     * @param sDrccionArchvo Ruta del fichero que desea procesar
     * @param lsCntndo Lista con el contenido que va a tener el archivo plano
     * @param bCntnuaCntndo true == Adiciona el contenido al final del archivo plano existente; false == Adiciona el contenido reemplazando toda la informacion del archivo plano existente
     * @return boolean true == se creo el archivo plano con exito; false == no se pudo crear el archivo plano
     */
    private boolean fnbCreaPlano(boolean bCnfgrcion, String sDrccionArchvo, List <String> lsCntndo, boolean bCntnuaCntndo){
        this.bEstdo = true;
        this.bEstdo = fnbCargaArchivo(bCnfgrcion, sDrccionArchvo);
        this.iCont = 0;
        if(this.bEstdo){
            try {
                this.fwEscrbe = new FileWriter(this.flArchvo, bCntnuaCntndo);
                this.bwBffer = new BufferedWriter(this.fwEscrbe);
                this.pwImprme = new PrintWriter(this.bwBffer);
                for (this.iCont = 0; this.iCont < lsCntndo.size(); this.iCont++) {
                    this.pwImprme.println(lsCntndo.get(this.iCont));
                }
                this.pwImprme.flush();
            } catch (IOException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbCreaPlano");
                this.bEstdo = false;
            }finally{
                try {
                    this.frLeeArchvo.close();
                    this.pwImprme.close();
                    this.bwBffer.close();
                    this.fwEscrbe.close();
                } catch (IOException ex) {
                    this.sDscpcionError = ex.getMessage();
                    System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbCreaPlano");
                    this.bEstdo = false;
                }
            }
        }
        return this.bEstdo;
    }
    /***
     * Metodo que permite leer un archivo plano
     * @param bCnfgrcion true == Carga ruta del fichero de configuracion e ignora el parametro sDrccionArchvo; false = Carga el fichero que se encuentra en sDrccionArchvo
     * @param sDrccionArchvo Ruta del fichero que desea procesar
     * @return boolean true == se proceso la lectura del archivo plano con exito; false == no se pudo realizar la lectura del archivo plano
     */
    private boolean fnbLeePlano(boolean bCnfgrcion, String sDrccionArchvo){
        this.bEstdo = true;
        this.bEstdo = fnbCargaArchivo(bCnfgrcion, sDrccionArchvo);
        this.lsLctra = new ArrayList();
        if(this.bEstdo){
            this.brBffer = new BufferedReader(this.frLeeArchvo);
            try {
                while (this.brBffer.ready()) {
                    this.lsLctra.add(this.brBffer.readLine().toString());
                }
            } catch (IOException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbLeePlano");
                this.bEstdo = false;
            }finally{
                try {
                    this.frLeeArchvo.close();
                    this.brBffer.close();
                } catch (IOException ex) {
                    this.sDscpcionError = ex.getMessage();
                    System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbLeePlano");
                    this.bEstdo = false;
                }
            }
        }
        return this.bEstdo;
    }
    /***
     * Metodo que mueve un archivo de un directorio windows a otro directorio windows
     * @param flArchvo parametro tipo File con el archivo a mover cargado
     * @param sDrctrioDstno parametro tipo String con la ruta destino del archivo
     * @return boolean true == proceso exitoso; false == proceso fallido
     */
    public synchronized boolean fnbMueveArchivoWin(File flArchvo, String sDrctrioDstno){
        this.bEstdo = true;
        this.flDrctrio = new File(sDrctrioDstno);
        if(!this.flDrctrio.isDirectory()){
            this.flDrctrio.mkdirs();
        }
        if(flArchvo.exists()){
            this.sCmndo = "cmd.exe /C move "+fnsAjustaRuta2(flArchvo.getPath())+" "+fnsAjustaRuta2(sDrctrioDstno);
            this.pPrcso = null;
            try {
                this.pPrcso = Runtime.getRuntime().exec(sCmndo);
                this.pPrcso.waitFor();
            } catch (IOException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbMueveArchivoWin");
                this.bEstdo = false;
            } catch (InterruptedException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbMueveArchivoWin");
                this.bEstdo = false;
            }finally{
                this.pPrcso.destroy();
            }
        }else{
            this.bEstdo = false;
        }
        return this.bEstdo;
    }
    /***
     * Abre el Manual de DialerFiles
     * @return boolean true == proceso exitoso; false == proceso fallido
     */
    public synchronized boolean fnbAyuda(){
        this.bEstdo = true;
        this.arsAyda = new String[2];
        this.arsAyda[0] = "C:\\Windows\\hh.exe";
        this.arsAyda[1] = "DIRECCION DE CARPETAS\\DialerFile.chm";
        this.pPrcso = null;
        try {
            this.pPrcso = Runtime.getRuntime().exec(this.arsAyda);
            this.pPrcso.waitFor();
        } catch (IOException ex) {
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbAyuda");
            this.bEstdo = false;
        } catch (InterruptedException ex) {
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbAyuda");
            this.bEstdo = false;
        }finally{
            this.pPrcso.destroy();
        }
        return this.bEstdo;
    }
    /***
     * Metodo que copia un archivo de un directorio windows a otro directorio windows
     * @param flArchvo parametro tipo File con el archivo a mover cargado
     * @param sDrctrioDstno parametro tipo String con la ruta destino del archivo
     * @return boolean true == proceso exitoso; false == proceso fallido
     */
    public synchronized boolean fnbCopiaArchivoWin(File flArchvo, String sDrctrioDstno){
        this.bEstdo = true;
        if(flArchvo.exists()){
            this.sCmndo = "cmd.exe /C copy "+fnsAjustaRuta2(flArchvo.getPath())+" "+fnsAjustaRuta2(sDrctrioDstno);
            this.pPrcso = null;
            try {
                this.pPrcso = Runtime.getRuntime().exec(sCmndo);
                this.pPrcso.waitFor();
            } catch (IOException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbCopiaArchivoWin");
                this.bEstdo = false;
            } catch (InterruptedException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbCopiaArchivoWin");
                this.bEstdo = false;
            }finally{
                this.pPrcso.destroy();
            }
        }else{
            this.bEstdo = false;
        }
        return this.bEstdo;
    }
    /***
     * Verifica La letra inicial del fichero
     * @param flArchvo parametro tipo File cargado previamente con el archivo a procesar
     * @return Retorna un char en mayuscula, indicando la letra inicial del fichero; si no existe el archivo retorma 0
     */
    public synchronized char fncVerificaInicial(File flArchvo){
        this.cCrcter = ' ';
        if(flArchvo.exists()){
            this.sNmbreArchvo = flArchvo.getName().toUpperCase();
            this.cCrcter = this.sNmbreArchvo.charAt(0);
        }else{
            this.cCrcter = '*';
            this.sDscpcionError = "El fichero no existe o fue removido sin autorizacion";
            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
            fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clPlano:fncVerificaInicial:1");
        }
        return this.cCrcter;
    }
    /***
     * Metodo que renombra un archivo
     * @param flArchvo parametro tipo File con el archivo a renombrar cargado
     * @param iCntdadMxLtras parametro tipo int con la cantidad maxima de caracteres del mismo nombre del archivo ejemplo desde el caracter 1 hasta el 10
     * @param sExtncion parametro tipo String con la extension del fichero nuevo
     * @return File con el archivo renombrado si la operacion fue exitosa de lo contrario devuelve el File con el nombre inicial
     */
    public synchronized File fnflAjustaTamano(File flArchvo, int iCntdadMxLtras, String sExtncion){
        this.arsNmbre = flArchvo.getName().split("\\.");
        this.sRta = "";
        this.sRtaFnal = "";
        this.flNmbreNvo = null;
        this.flArchvoRtrno = null;
        this.bCntrl = false;
        this.sNmbreTmpral = "";
        this.iCont = 0;
        this.cCrcter = ' ';
        for(this.iCont = 0; this.iCont<this.arsNmbre[0].length(); this.iCont++){
            this.cCrcter = this.arsNmbre[0].charAt(this.iCont);
            if(this.cCrcter != ' '){
                this.sNmbreTmpral = this.sNmbreTmpral + this.cCrcter;
            }
        }
        this.arsNmbre[0] = this.sNmbreTmpral;
        if(this.arsNmbre[0].length() > iCntdadMxLtras){
            this.arsNmbre[0] = this.arsNmbre[0].substring(0, iCntdadMxLtras).toUpperCase();
        }
        this.sRta = fnsAjustaRuta(flArchvo.getPath());
        this.arsRta = fnsAjustaRuta(this.sRta).split("\\/");
        for(this.iCont = 0; this.iCont<this.arsRta.length - 1; this.iCont++){
            this.sRtaFnal = this.sRtaFnal + this.arsRta[this.iCont] + "/";
        }
        this.sRtaFnal = this.sRtaFnal + this.arsNmbre[0] + "."+sExtncion ;
        this.flNmbreNvo = new File(this.sRtaFnal);
        this.bCntrl = flArchvo.renameTo(this.flNmbreNvo);
        if(this.bCntrl){
            this.flArchvoRtrno = this.flNmbreNvo;
        }else{
            this.flArchvoRtrno = flArchvo;
        }
        return this.flArchvoRtrno;
    }
    /***
     * Metodo que ajusta el formato de ruta de directorios para Windows
     * @param sRta parametro String que contiene la ruta a ajustar
     * @return String con la ruta procesada y ajustada
     */
    private String fnsAjustaRuta(String sRta){
        this.sNvaRta = "";
        this.cCrcter = ' ';
        this.iCont = 0;
        for(this.iCont = 0; this.iCont<sRta.length(); this.iCont++){
            this.cCrcter = sRta.charAt(this.iCont);
            if(this.cCrcter == '\\'){
                sNvaRta = sNvaRta + '/';
            }else{
                sNvaRta = sNvaRta + this.cCrcter;
            }
        }
        return sNvaRta;
    }
    /***
     * Metodo que ajusta el formato de ruta de directorios para Windows
     * @param sRta parametro String que contiene la ruta a ajustar
     * @return String con la ruta procesada y ajustada
     */
    private String fnsAjustaRuta2(String sRta){
        this.sNvaRta = "";
        this.cCrcter = ' ';
        this.iCont = 0;
        for(this.iCont = 0; this.iCont<sRta.length(); this.iCont++){
            this.cCrcter = sRta.charAt(this.iCont);
            if(this.cCrcter == '/'){
                sNvaRta = sNvaRta + '\\';
            }else{
                sNvaRta = sNvaRta + this.cCrcter;
            }
        }
        return sNvaRta;
    }
    /***
     * Metodo para capturar la fecha del sistema
     * @return String Con la fecha actual del sistema DD/MM/AAAA HH:MM:SS
     */
    public synchronized String fnsFechaTiempo(){
        this.sFchaTmpo = "";
        this.cClndrio = Calendar.getInstance();
        this.sDia = Integer.toString(this.cClndrio.get(Calendar.DATE));
        this.sMes = Integer.toString(this.cClndrio.get(Calendar.MONTH)+1);
        this.sAnnio = Integer.toString(this.cClndrio.get(Calendar.YEAR));
        this.sHra = Integer.toString(this.cClndrio.get(Calendar.HOUR_OF_DAY));
        this.sMnto = Integer.toString(this.cClndrio.get(Calendar.MINUTE));
        this.sSgndo = Integer.toString(this.cClndrio.get(Calendar.SECOND));
        this.sFchaTmpo = this.sDia+"/"+this.sMes+"/"+this.sAnnio+" "+this.sHra+":"+this.sMnto+":"+this.sSgndo;
        return this.sFchaTmpo;
    }
    /***
     * Metodo para escribir el log de sucesos de envio
     * @param sLog Parametro String Con la informacion a ingresar al archivo de log
     * @return boolean true == Escritura del log exitosa; false == escritura del log fallida
     */
    public synchronized boolean fnbLog(String sLog){
        this.bEstdo = true;
        this.lsCntndo = new ArrayList();
        this.flLgs = new File(this.sDrccionCnfgrcion);
        if(!this.flLgs.exists()){
            try {
                this.flLgs.createNewFile();
                this.lsCntndo.add("CSO;IDSCIO;TPOAGNTE;NMBREARCHIVO;TPOARCHVO;MDIO;DSTNO;FCHAPRCSO");
                this.lsCntndo.add("CSO --> E == ENVIO EXITOSO; F == FALLIDO POR ENVIO");
                this.lsCntndo.add("IDSCIO --> IDENTIFICACION O NOMBRE DEL SOCIO");
                this.lsCntndo.add("TPOAGNTE --> 1 == AGENTE INTERNO (SPRBUN); 2 == AGENTE EXTERNO SOCIO");
                this.lsCntndo.add("NMBREARCHIVO --> NOMBRE DEL ARCHIVO PROCESADO");
                this.lsCntndo.add("TPOARCHVO --> TIPO DE ARCHIVO PROCESADO");
                this.lsCntndo.add("MDIO --> F == MEDIO DE ENVIO FTP; C == MEDIO DE ENVIO CORREO ELECTRONICO");
                this.lsCntndo.add("DSTNO --> SEGUN EL MEDIO F == HOST DESTINO; C == CORREO DESTINATARIO");
                this.lsCntndo.add("FCHAPRCSO --> FECHA DE ENVIO");
                this.lsCntndo.add("");
                this.lsCntndo.add("");
            } catch (IOException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnbLog");
            }
        }
        this.lsCntndo.add(sLog+" ("+fnsFechaTiempo()+")");
        this.bEstdo = fnbProceso(1, true, "", this.lsCntndo, true);
        return this.bEstdo;
    }
    /***
     * Metodo para escribir la excepcion en un archivo
     * @param sExcepcion Parametro String con la informacion de la excepcion capturada
     * @return boolean true == Escritura de excepcion exitosa; false == Escritura de excepcion fallida
     */
    public synchronized boolean fnExcepcion(String sExcepcion){
        this.bEstdo = true;
        this.lsCntndo = new ArrayList();
        this.flLgs = new File("DIRECCION DE CARPETAS/Excepcion.dll");
        if(!this.flLgs.exists()){
            try {
                this.flLgs.createNewFile();
            } catch (IOException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError+" fnExcepcion");
            }
        }
        this.lsCntndo.add(sExcepcion+" ("+fnsFechaTiempo()+")");
        this.bEstdo = fnbProceso(1, false, this.flLgs.getAbsolutePath(), this.lsCntndo, true);
        return this.bEstdo;
    }
}

No hay comentarios:

Publicar un comentario