0

ユーザーがファイルに情報を書き込むことができるプログラムがあります。元のファイルのすべてを上書きするのではなく、追加します。問題は、ユーザーが十分な情報を入力しないと、プログラムがクラッシュすることです。

テキスト ファイルの各行は次のようになります。

情報 1、情報 2、情報 3、情報 4、情報 5、情報 6、情報 7

各行には 6 つのコンマと 7 つの情報があります。したがって、ユーザーが 4 つの情報しか入力しない、または 2 つのカンマしか使用しないなどの場合に、クラッシュを防ぐために使用する例外の種類を知る必要があります。

これが私のコードです:

private void addDVDButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    FileWriter fWriter = null;
    BufferedWriter writer = null;
    try {
        fWriter = new FileWriter("info.txt", true);
        writer = new BufferedWriter(fWriter);

        writer.write(JOptionPane.showInputDialog(this, "ADDING INFO"));
        writer.newLine();
        writer.close();
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this,"More information required");
    }
}                        
4

2 に答える 2

1

例外をスローしません。ユーザー入力を検証し、有効な場合にのみファイルに書き込みます。

于 2011-04-11T12:22:14.557 に答える
0

どうすればそれを確認できますか?これは私が立ち往生しているものです。

たとえば、 which を使用すると、 if を確認できるString.split(",")が得られます。String[]String[].length == 7

編集:これが問題の完全な解決策ではなく、良い出発点であることを確認するためだけです。他のすべてのコメント/回答に強く同意します。例外をスローするのはやり過ぎです。

編集 2:ユーザーが次の文字列を入力として与え、ファイルに書き出す前にそれを検証したいとします。

String str = "a1,b2,c3,d4,e5,f6";

ご覧のとおり、この文字列には 6 つの要素と 5 つのカンマがあります。つまり、ユーザーに警告を表示する必要があります。これを確認する非常に簡単な方法は次のとおりです。

if (str.split(",").length != 7) // checks if the string is comma delimited and has seven pieces of information
    warnUser();   // whatever you want to do to warn user
else 
    writeToFile(str);

これは原則を示しているだけであることに注意してください。あなたの場合、書式設定などの他のことを確認したい場合や、英数字のテキストがあり、アンダースコアなどがないことを確認したい場合があります。チェックしたい条件がたくさんある場合はvalidateInput(str)、一連の条件チェックであるメソッドを記述してtrue、すべての条件がチェックアウトされた場合にのみ返すことができます。

于 2011-04-11T12:26:52.500 に答える