2012-04-27 113 views
0

這是我剛寫的一堂課。以前它實際上是在另一個應用程序中創建一個文件但不知何故,它不工作。它不是創建一個新的文件,我收到此錯誤:爲什麼我的代碼不是創建一個新文件?

package hostelmanagement; 

/** 
* 
* @author princess 
*/ 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

import java.io.Externalizable; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInput; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutput; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.Date; 
import java.util.HashSet; 
import java.util.Set; 
import javax.swing.JOptionPane; 

/** 
* 
* @author princess 
*/ 
public class Student implements Serializable, Externalizable { 

public static Set<Student> listOfStudents = new HashSet<Student>();  
public static File oFile = new File("Student.dat"); 


//Data Members 
private String studentID; 
private String name; 
private Date dateOfReg; 

//Constructor 
Student(String number,String name) 
{ 
this.studentID = number; 
this.name = name; 
dateOfReg = new Date(); 
} 


public String getName() 
{ 
return name; 
} 

public String getStudentID() 
{ 
return studentID; 
} 

public Date getDateOfReg() 
{ 
return dateOfReg; 
} 

public void register() throws FileNotFoundException, IOException, ClassNotFoundException  
{  

HashSet<Student> sss = Student.getListOfStudents(); 
sss.add(this); 
FileOutputStream OFileStream = new FileOutputStream(oFile);  
ObjectOutputStream ObjectOFileStream = new ObjectOutputStream(OFileStream);  
ObjectOFileStream.writeObject(sss); 
ObjectOFileStream.close();  
} 

public static HashSet<Student> getListOfStudents() throws FileNotFoundException, IOException, ClassNotFoundException 
{ 
HashSet ss; 
File iFile = new File("Student.dat"); 
FileInputStream IFileStream = new FileInputStream(iFile); 
ObjectInputStream ObjectIFileStream = new ObjectInputStream(IFileStream); 
ss = (HashSet<Student>) ObjectIFileStream.readObject(); 
ObjectIFileStream.close(); 
return (HashSet<Student>) ss; 
} 

public static void printListOfStudents() throws FileNotFoundException, IOException, ClassNotFoundException 
{ 
HashSet<Student> sa = Student.getListOfStudents(); 
for (Student x : sa) 
{System.out.println(x.toString());} 
} 


public static Student getStudentByID(String aNumber) throws FileNotFoundException, IOException, ClassNotFoundException 
{ 
HashSet<Student> currentListOfStudents = Student.getListOfStudents();  
Student result = null; 
for (Student x : currentListOfStudents) 
    { 
if (x.getStudentID().equalsIgnoreCase(aNumber)) 
     { result = x; 
      break; 
     } 
    } 
     if (result == null) 
    { 
     JOptionPane.showMessageDialog(null, "Student not found"); 
    } 
    return result; 
} 



    @Override 
public String toString() 
{ 
// include the code to retrieve assigned apartment  
return "Name: " + name +" StudentID: "+ studentID + " Registered On: " + dateOfReg; 
} 


    @Override 
public boolean equals(Object another) 
{ 
Student stud = (Student)another; 
return this.name.equals(stud.name)&& this.studentID.equals(stud.studentID); 
} 

    @Override 
public int hashCode() 
{ 
int hash = name.hashCode(); 
return hash; 

} 

    @Override 
    public void writeExternal(ObjectOutput out) throws IOException { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 

錯誤:

run: 
Test 1 
Apr 27, 2012 10:19:30 AM hostelmanagement.HostelManagement main 
SEVERE: null 
java.io.FileNotFoundException: Student.dat (The system cannot find the file specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:106) 
    at hostelmanagement.Student.getListOfStudents(Student.java:86) 
    at hostelmanagement.Student.register(Student.java:74) 
    at hostelmanagement.HostelManagement.main(HostelManagement.java:34) 
Exception in thread "main" java.io.FileNotFoundException: Student.dat (The system cannot find the file specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:106) 
    at hostelmanagement.Student.getListOfStudents(Student.java:86) 
    at hostelmanagement.HostelManagement.main(HostelManagement.java:46) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 0 seconds) 

問題出在哪裏?

回答

2

你的錯誤表明你正試圖讀取一個不存在的文件。它只會在您嘗試寫入新文件時創建新文件。

我會做的是以下幾點。

public static Set<Student> getListOfStudents() throws IOException, ClassNotFoundException { 
    File studentFile = new File("Student.dat"); 
    FileInputStream in = null; 
    try { 
     in = new FileInputStream(studentFile); 
     ObjectInputStream oos = new ObjectInputStream(in); 
     retyurn (Set<Student>) oos.readObject(); 
    } catch(FileNotFoundException noStudents) { 
     return new HashSet<Student>(); 
    } finally { 
     if (in != null) 
      try { 
       in.close(); 
      } catch(IOException ignored) {} 
    } 
} 
+0

感謝它的工作!你救了我的一天! – Sasha 2012-04-27 08:10:30

3

鑑於您沒有提供您的主要邏輯,我假設您在致電register()(寫入文件)之前調用getListStudents()(讀取文件)。毫無疑問,它沒有找到它。

問題是您的程序試圖讀取仍然不存在的文件,而不是它無法創建它。請仔細閱讀您的堆棧跟蹤。

0

問題可能是您正在加載的文件在getListOfStudents()register()方法可能不存在於指定位置。

相關問題