Я все еще очень новичок в java, и я работаю над школьным заданием, которое работает над криптографией. Когда я искал методы для чтения из файлов, я видел, что у многих было блок try и catch. Я не очень хорошо знаком с их использованием, и я хочу попытаться избежать использования их в своем коде, но когда я их удалю, у меня есть два исключения, описанные в новом в new FileReader
и в скобке после reader.readLine()
. Но если я их использую, он работает относительно хорошо. Может ли кто-нибудь объяснить, что происходит? Также при использовании catch и try я получаю исключение Null, когда моя кодировка выполняется. Любая помощь приветствуется.Программа сообщает об исключениях, когда не используется try и catch
import java.io.*;
import java.util.*;
public class Encrypter {
public static void main(String[] args) {
File input = null;
if (1 < args.length) {
input = new File(args[1]);
} else {
System.err.println("Invalid arguments count:" + args.length);
System.exit(0);
}
String key = args[0];
BufferedReader reader = null;
try {
int i = 0;
String[] inputText = new String[20];
String[] encryptText = new String[20];
reader = new BufferedReader(new FileReader(input));
while ((inputText[i] = reader.readLine()) != null) {
encryptText[i] = inputText[i];
System.out.println(inputText[i]);
++i;
}
int hash = key.hashCode();
Random random = new Random(hash);
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
String alphabetPerm = alphabet;
char temp;
for (int j = 0; j < 100; j++) {
int n1 = random.nextInt(27) + 0;
int n2 = random.nextInt(27) + 0;
char[] swapper = alphabet.toCharArray();
temp = swapper[n1];
swapper[n1] = swapper[n2];
swapper[n2] = temp;
String alphaSwap = new String(swapper);
alphabet = alphaSwap;
}
System.out.println(alphabet);
for (int k = 0; k < inputText.length; k++) {
encryptText[k] = inputText[k].replaceAll("[^A-Za-z0-9 ]+", " ");
for (int j = 0; j < inputText[k].length(); j++) {
int index = alphabetPerm.indexOf(encryptText[k].charAt(j));
encryptText[k] = alphabetSwapper(encryptText[k], alphabet, index, j);
System.out.println(encryptText[k]);
}
}
} catch (Exception e) {
System.err.println("Caught Exception: " + e.getMessage());
}
}
public static String alphabetSwapper(String s, String alpha, int index, int value) {
char toSwap = s.charAt(value);
char[] inputChars = s.toCharArray();
inputChars[value] = alpha.charAt(index);
String swapped = new String(inputChars);
return swapped;
}
}
Да, мой код будет компилироваться только с помощью try/catch или put 'throw IOException' в основном методе. Мне просто интересно, что из этого кода вызывает исключения, является ли тот факт, что я использую «BufferedReader» или манипулирую файлами? Мне никогда не приходилось использовать это раньше. –
Каждый входной или выходной поток формально объявляет проверенные IOExceptions (или деривации) по его основным методам. Поскольку концепция очень широкая, поток может считывать почти все, что представляет собой простую последовательность байтов: файлы, массивы байтов, строки сокетов и т. Д. Во время операций на этих ресурсах может произойти много сбоев, которые сигнализируются через исключение. – Heri
Читатели и писатели - это всего лишь тонкие обертки вокруг другого потока. О читателях и писателях вы работаете со строками (последовательностями символов), тогда как в потоках вы работаете с чистым байтом или байтом. Поэтому - при работе с Readers and Writers - важно использовать признак используемого набора символов (чтобы определить перевод байтового массива в символы) – Heri