在Java中的文件路径之间切换

时间:2018-09-24 15:04:20

标签: java filestream mergesort external-sorting

我正在为外部排序编写一个合并排序,该排序一次从文件A读取2个数据块,将它们合并成更大的块,然后将其写入文件B。此后,我需要再读取2从文件B一次将这些增加的块中的1个块合并,将它们合并为1个更大的块,然后将其写入文件A。此切换一直进行到所有数据最后都计为1个块为止。

我尝试在每次迭代后像这样交换标识符:

RandomAccessFile temp = fileA;
    fileA = fileB;
    fileB = temp;

这要求我用新的文件目录名更新BufferedInput和BufferedOutputStreams并每次构造它们。

我的RAM数量有限,因此除非必要,否则我将无法继续创建新对象。有没有更好的方法可以在每次迭代时切换目标文件和源文件?

1 个答案:

答案 0 :(得分:-1)

一个简单的通用Swapable类应允许您在两个对象之间交换。

class Swapable<T> {
    final T a;
    final T b;
    boolean useA = true;

    Swapable(T a, T b) {
        this.a = a;
        this.b = b;
    }

    T get() {
        return useA ? a : b;
    }

    void swap() {
        useA = !useA;
    }
}

创建两个RandomAccessFile,然后将它们安装在Swapable中。使用get方法获取当前文件。使用swap方法在它们之间切换。