我查看了很多关于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