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)

問題はどこだ?

4

3 に答える 3

3

メインロジックを提供していないことを考えると、呼び出すgetListStudents()(ファイルを書き込む)前に呼び出すregister()(ファイルを読み取る)と仮定します。それが見つからないのは当然のことです。

問題は、プログラムがまだ存在しないファイルを読み取ろうとすることであり、作成に失敗することではありません。スタックトレースを注意深くお読みください。

于 2012-04-27T07:26:51.037 に答える
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) {}
    }
}
于 2012-04-27T07:46:22.150 に答える
0

問題は、ロードしているファイルgetListOfStudents()register()メソッドが指定された場所に存在しない可能性があることです。

于 2012-04-27T07:45:32.103 に答える