/* * CompactaRLE.java * * Created on 11 de Setembro de 2002, 01:15 */ package Compactador; import java.io.*; import java.text.*; /** * * @author Roberval Alves Godoy */ public class CompactaRLE extends javax.swing.JFrame { String c = ""; /** Creates new form CompactaRLE */ public CompactaRLE() { initComponents(); setSize(700,500); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jScrollPane2 = new javax.swing.JScrollPane(); jTextArea2 = new javax.swing.JTextArea(); jScrollPane3 = new javax.swing.JScrollPane(); jTextArea3 = new javax.swing.JTextArea(); jTextField1 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jTextField2 = new javax.swing.JTextField(); jTextField3 = new javax.swing.JTextField(); jTextField4 = new javax.swing.JTextField(); jButton3 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); setTitle("Compactador Run Length Encoding - RLE"); setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jPanel1.setLayout(null); jPanel1.setBorder(new javax.swing.border.EtchedBorder()); jTextArea1.setEditable(false); jTextArea1.setLineWrap(true); jTextArea1.setBorder(new javax.swing.border.TitledBorder("Arquivo Original")); jScrollPane1.setViewportView(jTextArea1); jPanel1.add(jScrollPane1); jScrollPane1.setBounds(30, 100, 170, 240); jTextArea2.setEditable(false); jTextArea2.setLineWrap(true); jTextArea2.setBorder(new javax.swing.border.TitledBorder("Arquivo Compactado")); jScrollPane2.setViewportView(jTextArea2); jPanel1.add(jScrollPane2); jScrollPane2.setBounds(250, 100, 170, 240); jTextArea3.setEditable(false); jTextArea3.setLineWrap(true); jTextArea3.setBorder(new javax.swing.border.TitledBorder("Arquivo Descompactado")); jScrollPane3.setViewportView(jTextArea3); jPanel1.add(jScrollPane3); jScrollPane3.setBounds(470, 100, 170, 240); jPanel1.add(jTextField1); jTextField1.setBounds(30, 60, 170, 20); jButton1.setText("Compactar"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jPanel1.add(jButton1); jButton1.setBounds(250, 50, 170, 26); jButton2.setText("Descompactar"); jButton2.setEnabled(false); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jPanel1.add(jButton2); jButton2.setBounds(470, 50, 170, 26); jLabel1.setText("Nome do Arquivo"); jPanel1.add(jLabel1); jLabel1.setBounds(70, 30, 96, 16); jLabel5.setText("Tamanho Original"); jPanel1.add(jLabel5); jLabel5.setBounds(30, 360, 100, 16); jLabel6.setText("Tamanho Compactado"); jPanel1.add(jLabel6); jLabel6.setBounds(30, 390, 128, 16); jLabel7.setText("Taxa de Compacta\u00e7\u00e3o"); jPanel1.add(jLabel7); jLabel7.setBounds(30, 420, 127, 16); jTextField2.setEnabled(false); jPanel1.add(jTextField2); jTextField2.setBounds(180, 360, 110, 20); jTextField3.setEnabled(false); jPanel1.add(jTextField3); jTextField3.setBounds(180, 390, 110, 20); jTextField4.setEnabled(false); jPanel1.add(jTextField4); jTextField4.setBounds(180, 420, 110, 20); jButton3.setText("Gravar Arquivo"); jButton3.setEnabled(false); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jPanel1.add(jButton3); jButton3.setBounds(500, 360, 120, 26); jButton4.setText("Limpar"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jPanel1.add(jButton4); jButton4.setBounds(500, 390, 120, 26); jButton5.setText("Sair"); jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); jPanel1.add(jButton5); jButton5.setBounds(500, 420, 120, 26); getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); pack(); }//GEN-END:initComponents private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed // Add your handling code here: limpaTela(4); }//GEN-LAST:event_jButton4ActionPerformed private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed // Add your handling code here: System.exit(0); }//GEN-LAST:event_jButton5ActionPerformed private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed // Add your handling code here: try { gravarArquivo(c); } catch (IOException e) { jTextArea3.setText("Erro na Gravação"); } }//GEN-LAST:event_jButton3ActionPerformed private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed // Add your handling code here: try { jTextArea3.setText(""); descompactaArquivo(c); } catch (IOException e) { jTextArea3.setText("Erro na Descompactação"); } }//GEN-LAST:event_jButton2ActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed // Add your handling code here: try { limpaTela(1); String n = lerArquivo(jTextField1.getText()); jTextField2.setText(n.length() + " bytes"); c = compactaArquivo(n); jTextField3.setText(c.length() + " bytes"); calcTaxa(n.length(), c.length()); jButton2.setEnabled(true); jButton3.setEnabled(true); } catch (IOException e) { jTextArea1.setText("Erro de leitura"); } }//GEN-LAST:event_jButton1ActionPerformed private String lerArquivo(String text) throws IOException { StringBuffer strin = new StringBuffer(); FileReader frin = new FileReader(text); BufferedReader brin = new BufferedReader(frin); String s; for(s = brin.readLine(); s != null; s = brin.readLine()) { jTextArea1.append(s); strin.append(s); } brin.close(); return strin.toString(); } private String compactaArquivo(String text) { StringBuffer strin = new StringBuffer(); int i = 0; int count; char c; while(i < text.length()) { count=0; c = text.charAt(i); while( (i< text.length()) && (c == text.charAt(i)) ) { count++; i++; } if(count > 1) { while(count > 9) { strin.append('#'); strin.append(9); strin.append(c); count= count-9; } strin.append('#'); strin.append(count); strin.append(c); } else { strin.append(c); } } String n = new String(strin); jTextArea2.append(n); return strin.toString(); } public String descompactaArquivo(String text) throws IOException { StringBuffer strin = new StringBuffer(); int i = 0; int j = 0; int count = 0; char cLeitura; while(i< text.length()) { cLeitura= text.charAt(i); if(cLeitura == '#'){ count= Integer.parseInt(String.valueOf(text.charAt(++i))); cLeitura= text.charAt(++i); for(j= 0; j