import java.io.*;
import java.util.*;
public class BBSTest {
public static void main(String[] args) {      
    String Line;
    Collection c = new ArrayList();    
    try {
      FileReader in = new FileReader("E:\\BBS.txt");      
      BufferedReader br = new BufferedReader(in);
      
      while((Line = br.readLine())!=null) {
        Line = br.readLine();
        c.add(Line);       
      }
      br.close(); 
      in.close();         
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件"); 
      System.exit(-1);
    }catch (IOException e) {
      System.out.println("文件读取错误");
    }   
     
    LineDate lineinfo[] = new LineDate[c.size()];
    Iterator ii = c.iterator();
    int i = 0;
    while(ii.hasNext()) {
      //next()的返回值为Object类型,需要转换为相应类型
      
     lineinfo[i] = new LineDate((String)ii.next());
     i++;      
    }
    new Lineprint(lineinfo);
  }
}class LineDate {

int id,pid;
String contend,linedate;
StringBuffer blackStr;
boolean isleaf;
String linearray[];

LineDate(String linedate) {
this.linedate = linedate;
StringTokenizer l = new StringTokenizer(linedate);
   for(int i = 0; i < 4; i++) {
   linearray[i] = l.nextToken();
   }
  
id = (new Integer(linearray[0])).intValue();
contend = linearray[1];
pid = (new Integer(linearray[2])).intValue();
if(linearray[3].equals("1")) isleaf = true;
else isleaf = false;
}
}class Lineprint {
LineDate lineinfo[];
Lineprint(LineDate lineinfo[]) {
this.lineinfo = lineinfo;
for(int i = 0; i < lineinfo.length; i++) {
if (lineinfo[i].pid != 0)
lineinfo[i].blackStr = lineinfo[lineinfo[i].pid].blackStr.append("    ");
else 
lineinfo[i].blackStr = null;
}
}

public void printline() {
for(int i = 0; i < lineinfo.length; i++){
System.out.println(lineinfo[i].blackStr.toString() + lineinfo[i].contend);
}
}
}运行javac编译显示:使用了未经检查或不安全的操作。
或运行javac -Xlint显示:13:[unchecked]对作为普通类型java.util.collection的成员的add<E>的调用未经检查 c.add<Line>;运行java显示: Exception in thread "main" java.lang.NullPointerException at LineDate.<init><BBSTest.java:49>
at BBSTest.main<BBSTest.java:30>

解决方案 »

  1.   

    import java.io.*;
    import java.util.*;
    public class BBSTest {
    public static void main(String[] args) {
    String Line;
    Collection<String> c = new ArrayList<String>();  //<>解决:使用了未经检查或不安全的操作。
    try {
    FileReader in = new FileReader("E:\\BBS.txt");      
    BufferedReader br = new BufferedReader(in);
          
    while((Line = br.readLine())!=null) {
    //Line = br.readLine();                //需要注掉
    c.add(Line);       
    }
    br.close(); 
    in.close();         
    //}catch (FileNotFoundException e) {           //不需要
    // System.out.println("找不到指定文件"); 
    // System.exit(-1);
    }catch (IOException e) {
     System.out.println("文件读取错误");
    }

         
    LineDate[] lineinfo = new LineDate[c.size()];
    Iterator ii = c.iterator();
    int i = 0;
    while(ii.hasNext())  {
          //next()的返回值为Object类型,需要转换为相应类型
    String s=(String)ii.next();
    try{
    lineinfo[i] = new LineDate(s);         //需要捕捉异常
    }catch (IOException e) {
    System.out.println("错误");
    }
    i++;      
    }
    new Lineprint(lineinfo).printline();
    }
    }class LineDate  { int id,pid;
    String contend,linedate;
    String blackStr;        
    boolean isleaf;
    String[] linearray; LineDate(String linedate) throws IOException {
    this.linedate = linedate;
    StringTokenizer l = new StringTokenizer(linedate);
    //for(int i = 0; i < 4; i++) {
    // linearray[i] = l.nextToken();
    //}
      
    this.id = Integer.parseInt(l.nextToken());
    this.contend = l.nextToken();
    this.pid = Integer.parseInt(l.nextToken());
    if(l.nextToken().equals("1")) this.isleaf = true;
    else isleaf = false;
    }
    }class Lineprint {
    LineDate lineinfo[];
    Lineprint(LineDate lineinfo[]) {
    this.lineinfo = lineinfo;
    for(int i = 0; i < lineinfo.length; i++) {
    if(lineinfo[i].pid==0) lineinfo[i].blackStr ="";
    else{
    for(int j=0;j<lineinfo.length;j++){
    if(lineinfo[j].id==lineinfo[i].pid) 
    lineinfo[i].blackStr =lineinfo[j].blackStr + "    ";
    }
    }
    //if (lineinfo[i].pid != 0)
    //lineinfo[i].blackStr = lineinfo[lineinfo[i].pid].blackStr.append("    ");
    //else  return;
    //lineinfo[i].blackStr = null;
    }
    } public void printline() {
    for(int i = 0; i < lineinfo.length; i++){
    System.out.println(lineinfo[i].blackStr.toString() + lineinfo[i].contend);
    }
    }
    }