文件未重命名或删除

时间:2015-12-04 02:56:47

标签: java

cur文件似乎没有被删除,临时文件也没有被重命名。

private class editClassListener implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
                File temp = new File("courseTemp.bin");
                File cur = new File("course.bin");
                ArrayList<Course> courses = new ArrayList<Course>();
                int count = 0;
                try {
                    FileInputStream fin = new FileInputStream(cur);
                    while(true)
                    {
                        try
                        {
                            ObjectInputStream oin = new ObjectInputStream(fin);
                            Course c = (Course) oin.readObject();
                            courses.add(c);
                        }catch (EOFException eofException){
                            break;
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        } catch (ClassNotFoundException e1) {
                            e1.printStackTrace();
                        }
                    }
                    while(count < courses.size())
                    {
                        if(enterCourseID.getText().equals(courses.get(count).getCourseID()))
                        {
                            courses.get(count).setDescription(enterCourseDescription.getText());
                            courses.get(count).setSemester((String) semesterBox.getSelectedItem());
                            courses.get(count).setYear(yearBox.getSelectedIndex());
                        }
                    }
                    temp.renameTo(cur);
                    cur.delete();
                    temp.delete();
                    fin.close();

                    FileOutputStream fos = new FileOutputStream(temp);
                    courses.trimToSize();
                    count = 0;
                    while(count < courses.size())
                    {
                            ObjectOutputStream oop = new ObjectOutputStream(fos);
                            oop.writeObject(courses.get(count));
                            count++;
                    }

                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }               
            }
        }

1 个答案:

答案 0 :(得分:0)

如果无法执行底层操作系统操作,则File.delete()File.renameTo()都不会抛出异常,而是返回false。原因取决于您的系统,但包括:

  • 您正在尝试重命名/删除的文件正在使用中(即开放流)
  • 该文件受操作系统保护(权利不足)
  • 如果要重命名:已存在具有新名称的文件

在你的情况下,至少第一点是正确的。在尝试删除FileInputStream fin之前,只需关闭cur即可。至于重命名,您可能需要在重命名cur之前先删除temp

另外,实用工具类java.nio.file.Files提供了重命名和删除方法(move()&amp; delete()),如果操作失败,会抛出IOException,导致错误消息失败的原因。