我查看了很多關於StreamCorruptedException的帖子,但很多都是關於服務器應用程序的。 首先;這是一個任務的一部分,但不工作的代碼是我的導師給我的代碼。我做了所有其他事情! (這使我瘋了)當使用文件選擇器(使用.getPath()和.getName())時,我有EOFException,FileNotFoundStreamCorruptedException,使用ObjectInputStream從TextFile中讀取(Java)
首先:如果我使用ObjectInputStream,是否需要使用ObjectOutputStream在文本文件中寫入數據?我甚至改寫了我的保存方法來使用oos,並在文本文件中添加了奇怪的圖標,並且出現了投射錯誤。
* IN MY GUI ActionEvent的方法是:*
openDiscsItm.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.addChoosableFileFilter(new FileChooserFilter());
int value = fc.showOpenDialog(MainForm.this);
try {
System.out.println("D: 1");
if(value == JFileChooser.APPROVE_OPTION);
{
System.out.println("D: 2");
File file = fc.getSelectedFile();
System.out.println("D: 3");
//String fileName = file.getPath();
store.loadDiscsArray(file);
System.out.println("D: 4");
changePnl.removeAll();
changePnl.add(create_CDPnl());
changePnl.revalidate();
}
} catch (Exception err) { System.out.println("STILL NOT WORKING :D"); }
}
});
* IN MY保存/載入CLASS *
public void saveDiscsArray(String fileName)
{
try
{
FileWriter fw = new FileWriter(fileName);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw);
out.println("Title,Artist");
for (int i = 0; i < discsArray.size(); i++)
{
CD c = discsArray.get(i);
String aTitle=c.getTitle();
String aArtist = c.getArtist();
out.println(aTitle+","+aArtist);
}
out.close();
bw.close();
fw.close();
} catch (Exception e)
{
System.out.println("Error: " + e);
}
}
public void loadDiscsArray(File fileName) throws IOException, ClassNotFoundException
{
try {
System.out.println("1");
BufferedInputStream br = new BufferedInputStream(new FileInputStream(fileName));
ObjectInputStream os = new ObjectInputStream(br);
System.out.println("2"); //Not Getting here *
try {
CD obj = (CD) os.readObject();
if (obj instanceof CD)
{ discsArray.add((CD) obj);
System.out.println(obj); }
} finally
{ os.close(); }
} catch (Exception ex)
{ System.out.println(ex); }
System.out.println("Done!");
}
我還包含了一些SOP看哪裏代碼實際上正在到達。 該類確實實現了Serializable,我也檢查了我正在關閉正確的作者。 謝謝! :)
*編輯 - 使用掃描儀
BufferedInputStream br = new BufferedInputStream(new FileInputStream(fileName));
Scanner sc = new Scanner(br);
System.out.println("2"); //Not Getting here *
try {
Object obj = sc.nextLine();
//if (obj instanceof CD)
discsArray.add((CD) obj);
System.out.println(obj);
} finally
{ sc.close(); }
現在,我得到一個錯誤鑄件從字符串到CD。
我使用掃描儀試過,(添加編輯) 但我怎麼正確地投字符串返回到CD(標題,藝術家)。我收到了投射錯誤。 – liloka 2012-03-01 20:37:13
謝謝!最後!!你是上帝寄來的。我之前使用過掃描儀,但從未使用過文本文件。 – liloka 2012-03-02 10:44:24
沒問題,與程序的其餘部分祝你好運。 – Perception 2012-03-02 11:52:54