Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中写入文件时使用插入排序_Java_Insertion Sort - Fatal编程技术网

在Java中写入文件时使用插入排序

在Java中写入文件时使用插入排序,java,insertion-sort,Java,Insertion Sort,我试图在写入文件时使用插入排序。我对Java相当陌生,似乎找不到解决方案。以下是我正在使用的代码: private void add(DbObject d) throws IOException { database = new RandomAccessFile(fName,"rw"); database.seek(database.length()); d.writeToFile(database); database.close(); } 这样做的目的是将人

我试图在写入文件时使用插入排序。我对Java相当陌生,似乎找不到解决方案。以下是我正在使用的代码:

private void add(DbObject d) throws IOException {
    database = new RandomAccessFile(fName,"rw");
    database.seek(database.length());
    d.writeToFile(database);
    database.close();
}
这样做的目的是将人员信息添加到文件中。其中一个字段是SSN#。目前,如果我要添加一个SSN#为2222222的记录,并且在它已经是一个SSN#为44444的记录之前,2222222记录将位于44444记录之后。我需要在2222222将自身插入444记录之前的位置执行此操作

我知道我必须比较这两者,并以某种方式将其存储在某种类型的
tmp
变量中,但我似乎不知道从哪里开始。非常感谢您的任何帮助。提前谢谢你

  • 您需要读取该文件以确定新记录需要放在哪里
  • 你需要为新唱片腾出空间
  • 您需要在正确的位置写入新记录
  • 1和3是相当容易的;2是令人讨厌的一点。2种主要方法:

  • 将新记录后面的文件部分复制到文件中足够深的地方,以便为新记录腾出空间
  • 通过复制新记录之前的内容,然后写入新记录,然后复制新记录之后的内容来制作文件副本。然后可以删除文件的旧副本并重命名新副本
  • 如果文件中的每一行长度相同,则所有这些都会稍微容易一些


    在绝大多数文件系统中(独立于编程语言),你不能“插入”文件中间的数据。要么你必须用完全相同的新字节数覆盖现有字节,要么你必须读取文件并将其重写为插入数据的新的、更长的文件。(我认为你想做的是不切实际的。要么做“内核”要么“脱机”对您的数据进行排序或使用类似数据库的东西,这样数据的实际顺序就不重要了。)谢谢您的回复。我听起来很没用,很烦人,但我不知道如何让它发挥作用。我试图让它通过文件指针,但不知道如何告诉它重写文件…使用seek到达文件中要开始读/写的位置,就像您在示例中使用seek移动到文件末尾一样。