java.io.FileNotFoundExeption出现问题
我正在构建一个程序,该程序将测试结果保存到学校本地驱动器上的文件中,我遇到了一个问题。问题是,当我尝试将测试结果保存到使用JFileChooser选择的文件时,程序抛出java.io.FileNotFoundException。下面是将测试结果序列化到文件的方法的代码java.io.FileNotFoundExeption出现问题,java,serialization,objectinputstream,objectoutputstream,Java,Serialization,Objectinputstream,Objectoutputstream,我正在构建一个程序,该程序将测试结果保存到学校本地驱动器上的文件中,我遇到了一个问题。问题是,当我尝试将测试结果保存到使用JFileChooser选择的文件时,程序抛出java.io.FileNotFoundException。下面是将测试结果序列化到文件的方法的代码 @Override public void testEnded() { start.setEnabled(true); pause.setEnabled(false)
@Override
public void testEnded() {
start.setEnabled(true);
pause.setEnabled(false);
end.setEnabled(false);
results.setVisible(false);
panel.setVisible(false);
cheatSheet.setEnabled(true);
tableTest.setEnabled(true);
TestEntryEvent event = new TestEntryEvent(name, panel.getCorrectCount(), panel.getIncorrectCount());
if(panel.getTotalCount() == 158) {
LinkedList<TestEntry> entries = new LinkedList<TestEntry>();
TestEntry entry = new TestEntry(event.getName(), event.getCorrect(), event.getIncorrect());
ObjectInputStream ois = null;
File file;
if(JOptionPane.showConfirmDialog(MainFrame.this, "This test has been completed with " + panel.getCorrectCount() + " questions correct out of " + panel.getTotalCount() + "\nWould you like to save the results?", "Test Completed", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
if(chooser.showSaveDialog(MainFrame.this) == JFileChooser.APPROVE_OPTION) {
file = new File(chooser.getSelectedFile().getName());
try(FileInputStream fis = new FileInputStream(file)) {
try {
ois = new ObjectInputStream(fis);
} catch (EOFException e) {
}
try {
if(ois != null) {
entries = (LinkedList<TestEntry>)ois.readObject();
}
} catch (EOFException e) {
}
if(entries == null) {
entries = new LinkedList<TestEntry>();
}
entries.add(entry);
if(ois != null) {
ois.close();
}
} catch (IOException | ClassNotFoundException e1) {
JOptionPane.showMessageDialog(MainFrame.this, "An error occurred! This was the message: " + e1.getClass());
}
try(FileOutputStream fos = new FileOutputStream(file)) {
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(entries);
oos.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(MainFrame.this, "An error occurred! This was the message: " + e.getClass());
}
}
}
control.addTestEntry(entry);
testTable.refresh();
control.deleteEntries();
}
if(panel.getTotalCount() < 158) {
JOptionPane.showMessageDialog(MainFrame.this, "You did not complete all questions on the test!", "Test Incomplete", JOptionPane.INFORMATION_MESSAGE);
}
panel.setCorrectCount(0);
panel.setIncorrectCount(0);
panel.setTotalCount(0);
panel.setCorrectLabel("Correct: " + panel.getCorrectCount());
panel.setIncorrectLabel("Incorrect: " + panel.getIncorrectCount());
testing = false;
roots.clear();
}
@覆盖
公营机构({
start.setEnabled(true);
pause.setEnabled(false);
end.setEnabled(false);
结果:setVisible(假);
面板设置可见(假);
cheatSheet.setEnabled(真);
tableTest.setEnabled(真);
TestEntryEvent事件=新建TestEntryEvent(名称,panel.getCorrectCount(),panel.getIncorrectCount());
if(panel.getTotalCount()==158){
LinkedList条目=新建LinkedList();
TestEntry entry=new TestEntry(event.getName()、event.getCorrect()、event.getError());
ObjectInputStream ois=null;
文件;
如果(JOptionPane.showConfirmDialog(MainFrame.this,“此测试已通过”+panel.getCorrectCount()+“问题已从”+panel.getTotalCount()+“\n是否保存结果?”,“测试已完成”,JOptionPane.YES\u NO\u选项)==JOptionPane.YES\u选项){
if(chooser.showsavedilog(MainFrame.this)=JFileChooser.APPROVE\u选项){
file=新文件(chooser.getSelectedFile().getName());
try(FileInputStream fis=newfileinputstream(文件)){
试一试{
ois=新的ObjectInputStream(fis);
}捕获(EOFEException e){
}
试一试{
如果(ois!=null){
entries=(LinkedList)ois.readObject();
}
}捕获(EOFEException e){
}
if(条目==null){
entries=newlinkedlist();
}
条目。添加(条目);
如果(ois!=null){
ois.close();
}
}捕获(IOException | ClassNotFoundException e1){
出现了一个错误!消息是:“+e1.getClass()”;
}
try(FileOutputStream fos=newfileoutputstream(文件)){
ObjectOutputStream oos=新的ObjectOutputStream(fos);
oos.writeObject(条目);
oos.close();
}捕获(IOE异常){
showMessageDialog(MainFrame.this,“出现错误!这是消息:”+e.getClass());
}
}
}
control.addTestEntry(条目);
testTable.refresh();
control.deleteEntries();
}
if(panel.getTotalCount()<158){
JOptionPane.showMessageDialog(MainFrame.this,“您没有完成测试中的所有问题!”,“测试未完成”,JOptionPane.INFORMATION_消息);
}
面板。setCorrectCount(0);
面板。设置不正确计数(0);
panel.setTotalCount(0);
panel.setCorrectLabel(“Correct:+panel.getCorrectCount());
panel.setIncorrectLabel(“不正确:”+panel.getIncorrectCount());
测试=假;
根。清除();
}
当我在学校网络的本地驱动器上创建一个文件时,我可以将测试结果序列化到该文件,并在同一台计算机上运行测试并序列化测试结果,然后该文件就会工作并找到!但是,当我使用另一台计算机运行程序并将结果序列化到另一台计算机上创建的本地驱动器文件时,它会给我一个java.io.FileNotFoundException。任何帮助都将不胜感激。
file=新文件(chooser.getSelectedFile().getName())代码>为什么不直接使用实际文件<代码>文件=选择器。getSelectedFile()代码>因为我正在检查问题的任何可能解决方案,所以我以前就这样做了。新建文件(chooser.getSelectedFile().getName())
!=<代码>选择器。getSelectedFile()
。第一个文件不包含所选文件中的任何目录信息。你说得对,我将把它改回来。但是我已经在学校电脑上用这个代码试过了。还有其他想法吗?除了直接使用选择器中的文件而不是名称之外,什么行号会引发异常(是输入流还是输出流)?能否显示file.toString()的结果?