私はまだJavaの新機能はまだありません。私は暗号化に取り組んでいる学校の課題に取り組んでいます。私がファイルから読み込むメソッドを探していたとき、私は多くの人がtryとcatchブロックを持っているのを見た。私はこれらの使い方にあまり慣れていないので、私は自分のコードでそれらを使うのを避けたいと思っていますが、私はそれらを削除するときに、new FileReader
とreader.readLine()
の後にブラケットで2つの例外があります。しかし、私がそれを使うと比較的うまく動作します。誰でも何が起きているのか説明できますか?また、キャッチを使用して、私のエンコードが完了したときに例外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を使ってコンパイルするか、mainメソッドに 'throw IOException'を入れるだけです。私はこのコードが例外を引き起こすものについて興味があります。それは 'BufferedReader'やファイル操作を利用しているのでしょうか?私は前にどちらかを使う必要はなかった。 –
すべての入力ストリームまたは出力ストリームは、チェックされたIOException(または派生)を主なメソッドで正式に宣言します。概念が非常に広いので、ストリームは単純なバイト列であるほとんどすべて、すなわちファイル、バイト配列、ソケット行などから読み取ることができます。これらのリソースの操作中に、スローされた例外を通して通知される多くの失敗が発生する可能性があります。 – Heri
リーダーとライターは別のストリームを囲む単なるラッパーです。 Onリーダとライターでは文字列(文字シーケンス)を操作し、ストリームでは純粋なバイト配列またはバイト配列で操作します。したがって、リーダとライタで作業する場合、使用するキャラクタセットの指示が重要です(バイト配列の文字への変換を定義するために) – Heri