Ошибка перехвата исключения - PullRequest
0 голосов
/ 23 июня 2010

вот мой код:

import java.util.*;
import java.io.*;
import java.lang.*;

public class Home {

    public static void main(String[] args) {
        FileOutputStream home,file,filein,fileinin;
        int x = 0;
        int y = 0;
        int yc = 0;
        int z = 0;
        int zc = 0;
        //TestCase
        String Annotation0 = "Hello";
        String Annotation1 = "World";
        String Annotation2 = "How Are You";
        String Annotation3 = "Today?";
        String Annotation4 = "Fine";
        String Annotation5 = "Thanks";
        List<List> corpus0 = new ArrayList<List>();
        List<List> corpus1 = new ArrayList<List>();
        List<String> document0 = new ArrayList<String>();
        List<String> document1 = new ArrayList<String>();
        List<String> document2 = new ArrayList<String>();
        List<String> document3 = new ArrayList<String>();
        List<List<List>> biglist = new ArrayList<List<List>>();
        biglist.add(corpus0);
        biglist.add(corpus1);
        corpus0.add(document0);
        corpus0.add(document1);
        corpus1.add(document2);
        corpus1.add(document3);
        document0.add(Annotation0);
        document1.add(Annotation1);
        document2.add(Annotation2);
        document2.add(Annotation3);
        document3.add(Annotation4);
        document3.add(Annotation5);

        try{
            home = new FileOutputStream("C:\\Windows\\Temp\\Home.html");
            new PrintStream(home).printf("%s", "<html>\n <body>\n <h1> Home </h1> \n");
            System.out.println("Home Created Successfully");
        while (x<biglist.size()){
            yc=0;
            try {
                file = new FileOutputStream ("C:\\Windows\\Temp\\Corpus"+x+".html");
                System.out.println("Corpus Added");
                new PrintStream(home).printf("%s%s%s%s%s", "<A href=\"/C:/Windows/Temp/Corpus",x,".html\">Corpus ",x,"</A><Br>\n");
                new PrintStream(file).printf("%s%s%s","<html>\n <body>\n <h1> Corpus ", x,"</h1> \n");
                while (yc<biglist.get(x).size()){
                    zc=0;
                    try{
                        filein = new FileOutputStream ("C:\\Windows\\Temp\\Document"+y+".html");
                        System.out.println("Document Added");
                        new PrintStream(filein).printf("%s%s%s","<html>\n <body>\n <h1> Document ", y,"</h1> \n");
                        new PrintStream(file).printf("%s%s%s%s%s", "<A href=\"/C:/Windows/Temp/Document",y,".html\">Document ",y,"</A><Br>\n");
                        while (zc<biglist.get(x).get(y).size()){
                            try{
                                fileinin = new FileOutputStream ("C:\\Windows\\Temp\\Annotation"+z+".html");
                                System.out.println("Annotation Added");
                                new PrintStream(fileinin).printf("%s%s%s%s%s","<html>\n <body>\n <h1> Annotation ", z,"</h1> \n <p>",biglist.get(x).get(y).get(z),"</p> \n </body> \n </html>");
                                new PrintStream(filein).printf("%s%s%s%s%s", "<A href=\"/C:/Windows/Temp/Annotation",z,".html\">Annotation ",z,"</A><Br>\n");
                                z++;
                                zc++;}                      
                            catch(Exception e) {System.out.println("Error Annotating");
                                z++;
                                zc++;}}
                        new PrintStream(filein).printf("%s","</body> \n</html>");
                        y++;
                        yc++;}
                    catch(Exception e) {
                        System.out.println("Error Making Document");
                        y++;
                        yc++;}}
                new PrintStream(file).printf("%s","\n</body> \n</html>");
            x++;}
            catch(Exception e) {
                System.out.println("Error Making Corpus");
                x++;
             }
        }
        new PrintStream(home).printf("%s","\n</body> \n</html>");}
        catch (Exception e){
            System.out.println("Fatal Error Home Creation Failed");
        }


    }

}

Каждый раз, когда я запускаю это, я получаю следующий вывод:

Home Created Successfully
Corpus Added
Document Added
Annotation Added
Document Added
Annotation Added
Error Annotating
Corpus Added
Document Added
Error Making Document
Document Added
Error Making Document

, что для меня означает, что он успешно добавил документ и перехватил исключениев то же время?Я действительно не уверен, как это возможно, может быть, я просто не понимаю, как ловить исключения полностью.Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 24 июня 2010

Вы должны отказаться от привычки писать такой код;лучше структурируя код и имея более чистый дизайн (даже для чего-то такого маленького), вы обнаружите, что отладка будет намного проще (или что у вас просто не будет столько проблем).

Прежде всего, вам следуетвыводить исключения, которые вы ловите, а не выбрасывать их.Они содержат точную информацию, необходимую для понимания того, что происходит не так.

Вы также должны прочитать javadoc для классов java.io, которые вы используете;для файловых файлов вам действительно нужно закрыть потоки и средства записи, иначе вы рискуете не очищать буферы и ничего не записывать.Обычно плохая практика - не закрывать потоки.

Наконец, я бы либо использовал функциональную декомпозицию, чтобы разбить ее на понятные подпрограммы (в будущем вы будете благодарны), либо использовал бы значимые имена переменных, а не такие вещи, как zc и yc.

0 голосов
/ 23 июня 2010

Вы распечатали «добавленный документ» до того, как фактически закончили писать файл.

В результате получается, что у вас, вероятно, есть файл на диске, но он не имеет того содержимого, которое вы ожидали, так как выкажется, что происходит сбой во время написания HTML.Как только возникает исключение, ничего не будет выполняться до блока try.

Кроме того, рассмотрите возможность использования e.printStackTrace() при обнаружении исключения, чтобы иметь представление о том, что это за исключение и откуда оно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...