这是我的代码:
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
对我来说意味着它成功添加了一个文档并同时捕获了异常?我真的不确定这是怎么可能的,也许我只是不明白异常捕获。请帮忙!
答案 0 :(得分:0)
在您成功写完文件之前,您已经打印了“添加的文档”。
您可能现在可能在驱动器上有该文件,但它没有您期望的内容,因为您在HTML编写过程中似乎失败了。一旦发生异常,在try块之前不会执行任何操作。
另外,考虑在捕获异常时使用e.printStackTrace()
,以便了解异常是什么以及来自何处。
答案 1 :(得分:0)
你应该打破写这样代码的习惯;通过更好地构建代码,并拥有整体更清晰的设计(即使是如此小的东西),您会发现调试更简单(或者您根本没有那么多问题)。
首先,您应该输出您正在捕获的异常而不是丢弃它们。它们包含您需要的完全信息,以了解出现了什么问题。
您还应该阅读您正在使用的java.io
类的javadoc;对于基于文件的东西,你真的需要关闭流和编写器,否则你可能无法刷新缓冲区而且没有任何内容写入。不关闭流是一种不好的做法。
最后,我要么使用功能分解将其分解为可理解的例程(将来你会感恩)或使用有意义的变量名而不是zc
和yc
之类的东西。