Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. package task3;
- 2.
- 3. import java.awt.EventQueue;
- 4. import java.awt.event.ActionEvent;
- 5. import java.awt.event.ActionListener;
- 6. import java.io.File;
- 7. import java.io.FileInputStream;
- 8. import java.io.FileNotFoundException;
- 9. import java.io.IOException;
- 10.
- 11. import javax.swing.JButton;
- 12. import javax.swing.JFileChooser;
- 13. import javax.swing.JFrame;
- 14. import javax.swing.JPanel;
- 15. import javax.swing.border.EmptyBorder;
- 16.
- 17. public class Task3 extends JFrame {
- 18.
- 19. private static final long serialVersionUID = 1L;
- 20. private JPanel contentPane;
- 21. private long lenOld;
- 22. private long lenNew;
- 23. private File file;
- 24. static char[] Alph;
- 25. static double[] cum_freq;
- 26. static String tab;
- 27. private static char[] chars;
- 28.
- 29. static double low = 0.0;
- 30. static double high = 1.0;
- 31.
- 32. private static void encode_symbol(int symbol) {
- 33. double range = high - low;
- 34. high = low + range * cum_freq[symbol];
- 35. if (symbol == 0) {
- 36. low = low + range * 0;
- 37. } else {
- 38. low = low + range * cum_freq[symbol - 1];
- 39. }
- 40. System.out.println(low + " - " + high);
- 41. }
- 42.
- 43. private static void sortik(double[] arr) {
- 44. for (int i = arr.length - 1; i > 0; i--) {
- 45. for (int j = 0; j < i; j++) {
- 46. if (arr[j] < arr[j + 1]) {
- 47. double tmp = arr[j];
- 48. arr[j] = arr[j + 1];
- 49. arr[j + 1] = tmp;
- 50. }
- 51. }
- 52. }
- 53. }
- 54.
- 55. private static void encode(String source) {
- 56. char[] etap = source.toCharArray();
- 57. tab = "";
- 58. for (int i = 0; i < etap.length - 1; i++) {
- 59. if (tab.contains(source.substring(i, i + 1))) {
- 60. continue;
- 61. } else {
- 62. tab += etap[i];
- 63. }
- 64. }
- 65. int nums = tab.length();
- 66. int counter = 0;
- 67. Alph = new char[nums];
- 68. cum_freq = new double[nums];
- 69. double[] cum = new double[nums];
- 70. char[] table = tab.toCharArray();
- 71. for (int i = 0; i < tab.length(); i++) {
- 72. Alph[i] = table[i];
- 73. System.out.println(Alph[i]);
- 74. }
- 75. chars = source.toCharArray();
- 76. for (int i = 0; i < nums; i++) {
- 77. for (int j = 0; j < chars.length; j++) {
- 78. if (Alph[i] == chars[j])
- 79. counter++;
- 80. }
- 81. cum[i] = (double) counter / chars.length;
- 82. counter = 0;
- 83. }
- 84. sortik(cum);
- 85.
- 86. counter = 0;
- 87. for (int i = 0; i < nums; i++) {
- 88. counter = i;
- 89. if (counter == 0) {
- 90. cum_freq[i] = cum[i];
- 91. } else {
- 92. while (counter >= 0) {
- 93. cum_freq[i] += cum[counter];
- 94. counter--;
- 95. }
- 96. }
- 97. }
- 98. }
- 99.
- 100. public Task3() {
- 101. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- 102. setSize(360, 200);
- 103. contentPane = new JPanel();
- 104. contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
- 105. setContentPane(contentPane);
- 106. contentPane.setLayout(null);
- 107.
- 108. JButton btnEncode = new JButton("Шифр");
- 109.
- 110. JButton btnChoose = new JButton("Файл");
- 111. btnChoose.addActionListener(new ActionListener() {
- 112. public void actionPerformed(ActionEvent arg0) {
- 113. JFileChooser fileopen = new JFileChooser();
- 114. int ret = fileopen.showDialog(null, "Открыть файл");
- 115. if (ret == JFileChooser.APPROVE_OPTION) {
- 116. file = fileopen.getSelectedFile();
- 117. String name = file.getName();
- 118. if (name.contains(".txt")) {
- 119. System.out.println("Имя файла " + name);
- 120. btnEncode.setEnabled(true);
- 121. lenOld = file.length();
- 122. System.out.println("Старый размер " + lenOld + "b");
- 123. } else {
- 124. System.out.println("Ошибка");
- 125. }
- 126. }
- 127. }
- 128. });
- 129. btnChoose.setBounds(110, 6, 89, 23);
- 130. contentPane.add(btnChoose);
- 131.
- 132. btnEncode.addActionListener(new ActionListener() {
- 133. public void actionPerformed(ActionEvent arg0) {
- 134. String path = file.getPath();
- 135. String textOld = "";
- 136.
- 137. try {
- 138. @SuppressWarnings("resource")
- 139. FileInputStream inFile = new FileInputStream(path);
- 140. byte[] str = new byte[inFile.available()];
- 141. inFile.read(str);
- 142. textOld = new String(str);
- 143. encode(textOld);
- 144. } catch (FileNotFoundException e) {
- 145. System.out.println("Ошибка");
- 146. System.out.println("Ошибка");
- 147. e.printStackTrace();
- 148. } catch (IOException e) {
- 149. System.out.println("Ошибка");
- 150. System.out.println("Ошибка");
- 151. e.printStackTrace();
- 152. }
- 153.
- 154. lenNew = file.length();
- 155. System.out.println("Новый размер " + lenNew + "b");
- 156. System.out.println((lenOld - lenNew) + "b");
- 157.
- 158. btnEncode.setEnabled(false);
- 159.
- 160. btnChoose.setEnabled(false);
- 161. }
- 162. });
- 163. btnEncode.setBounds(110, 36, 89, 23);
- 164. btnEncode.setEnabled(false);
- 165. contentPane.add(btnEncode);
- 166. }
- 167.
- 168. public static void main(String[] args) {
- 169. EventQueue.invokeLater(new Runnable() {
- 170. public void run() {
- 171. try {
- 172. Task3 frame = new Task3();
- 173. frame.setVisible(true);
- 174. } catch (Exception e) {
- 175. e.printStackTrace();
- 176. }
- 177. }
- 178. });
- 179. }
- 180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement