Pedido de Ajuda - Parse de um ficheiro de log do Microsoft E

1 resposta
N
Oi





Estou a fazer um parse de um ficheiro de log do Microsoft Exchange 5.5.  alguns campos são necessários, tendo  conseguido resolver esse problema. Contudo, quando tento fazer o parse do ficheiro em que este seja maior que 800 kb, o programa não consegue fazer o parse





Agradecia que alguém me pudesse dar umas dicas.





----


import java.util.Date;


import <a href="http://java.io">java.io</a>.<em>;


import java.text.</em>;


import java.util.Properties;





public class FileUtils


{


    private Thread timerThread;


    private Timer timerClass;





    public FileUtils()


    {


        timerClass = new Timer(this);


        timerThread = new Thread(timerClass);


        timerThread.start();


    }





    public String getTodaysFileName()


    {


        Date date = new Date();


        DateFormat df = new SimpleDateFormat("yyyyMMdd");


        String fileName = df.format(date);





        fileName = ".".concat(fileName).concat(".log");





        return fileName;


    }





    public String getFileInStringFormat()


    {


        String fileContent = new String(),str;


        DataInputStream fds = null;


        FileInputStream fis = null;





        try


        {


          fis = new FileInputStream(getTodaysFileName());


          fds = new DataInputStream(fis);





          while((str = fds.readLine()) != null)


            fileContent += str;


        }


        catch(IOException e){System.out.println("Erro ao ler o ficheiro de log");}


        catch(Exception e2){System.out.println("Error : "+e2.getMessage());}


        finally


        {


          try{fds.close();} //closes file


          catch(Exception e){e.printStackTrace();}


        }





        return fileContent;


    }





    public void createTodaysFile(String todaysFile)


    {


        FileOutputStream os = null;


        DataOutputStream dos = null;





        try


        {


          os = new FileOutputStream(getTodaysFileName().concat(".txt"));


          dos = new DataOutputStream(os);





          dos.writeBytes(todaysFile);


        }


        catch(IOException e){System.out.println("Erro ao escrever no ficheiro de Log");}





        finally


        {


          try{os.close();} //closes file


          catch(Exception e){e.printStackTrace();}


        }


    }





    public String parseServerFile(String fileContent)


    {


        char arrayChar[] = new char[fileContent.length()];


        char arrayCharRegister[] = new char[fileContent.length()];


        char arrayCharAux[] = new char[fileContent.length()];


        int h = 0;





        arrayChar = fileContent.toCharArray();





        for(int i=0;i<arrayChar.length;i++)


            //beginning of a register


            if((arrayChar[i]==´c´ && arrayChar[i+1]==´=´) || (arrayChar[i]==´C´ && arrayChar[i+1]==´=´))


            {


                int j=i+1,a=1;


                arrayCharRegister[0] = arrayChar[i];


                //gets a single register


                for(;arrayChar.length > j && !((arrayChar[j]==´c´ && arrayChar[j+1]==´=´) ||


                        (arrayChar[j]==´C´ && arrayChar[j+1]==´=´)); j++,a++)


                  arrayCharRegister[a] = arrayChar[j];





                //checks if it´s an F2 register


                for(int c = a-1; arrayCharRegister[c] != ´t´ && c >=0 ; c)


                  //it is


                  if(arrayCharRegister[c]==´@´)


                  {


                    //keeps the F2 register


                    for(int b = 0; b < a; b++,i++,h++)


                        arrayCharAux[h] = arrayCharRegister[b];


                  }





                arrayCharAux[h] = ´n´; h++;


                arrayCharAux[h] = ´r´; h++;


            }





        return String.valueOf(arrayCharAux);


    }





    public static void main(String[] args)


    {


        FileUtils fileUtils = new FileUtils();


    }


}


-----





public class Timer implements Runnable


{


    FileUtils fileUtils;


    int numberOfTimesToRun = 1;


    int numberOfSecDay = 86400;





    public Timer(FileUtils fileUtils){this.fileUtils = fileUtils;}





    public void run()


    {


        while(true)


        {


            fileUtils.createTodaysFile(fileUtils.parseServerFile(fileUtils.getFileInStringFormat()));





            try{Thread.sleep((int)(numberOfSecDay/numberOfTimesToRun));}


            catch(InterruptedException ie){}


        }


    }


-----








Obrigado


Nuno Ricardo










[ Esta mensagem foi editada por: nrfd em 23-02-2003 12:31 ]

1 Resposta

R

Já tentasse aumentar a memória da JVM ?
E a do windows ?

Experimenta usar BufferedReader e StringBuffer ao invés de usar só String.

O código String x += x; consume mais memódia do que o código StringBuffer sb; sb.append&#40;x&#41;;

[]s

Criado 23 de fevereiro de 2003
Ultima resposta 5 de mai. de 2005
Respostas 1
Participantes 2