Java读取和写入文件的对象

时间:2012-11-28 02:50:02

标签: java file object nio

我的任务是创建一个类(RandomAccessObjectFile),它提供对象的读取和写入以及在文件中搜索。这是我第一次使用Java File NIO,并希望确保我正确掌握它。以下是我在课堂上要求的方法,我正在寻找一些帮助,并更多地了解如何接近本课程的其余部分。

public class RandomAccessObjectFile {

RandomAccessFile raFile;
private RandomAccessObjectFile(String fileName) throws FileNotFoundException {
    raFile = new RandomAccessFile(new File(fileName), "rw");
}

static void create(String fileName) throws IOException {
    Path createTarget = Paths.get(fileName);
    Files.createFile(createTarget);
}

static void delete(String fileName) throws IOException {
    Path deleteTarget = Paths.get(fileName);
    Files.delete(deleteTarget);
}

static RandomAccessObjectFile open(String fileName) {

}

<T> void write(T obj) {
}

<T> T read() {

}

void seek(long location) {
}

long length() {

}

}

提前感谢您的所有帮助!

2 个答案:

答案 0 :(得分:2)

有关java.nio包的背景信息,您可以从java tutorial.开始 要将对象序列化为文件,我已经使用ObjectOutputStream取得了很好的成功。 我想您可能需要进一步澄清搜索方法应该做什么。长输入是文件位置吗?这似乎是一件奇怪的事情,因为写入文件的对象将占用文件中的各种空间。 seek方法的大多数输入值都是无效的,因为文件中的特定位置可能不代表对象序列化的开始。但是,如果这是解释输入参数的方式,那么我认为如果输入值不代表Object的开头,该方法应抛出IllegalArgumentException。

这个班级的用户如何知道如何寻找特定的对象?

也许您还应该存储一些索引数据。也许写入文件的每个对象都需要有一些唯一的ID字段。然后创建一个映射,将这些ID映射到文件中的位置。然后,可以使用此映射快速跳转到正确的文件位置以读取数据。只要文件中的数据不需要更改,此方法就可以正常工作。以这种方式向文件添加新对象应该可以正常工作,但修改对象或从文件中间删除对象需要更多的工作。

答案 1 :(得分:0)

除了PathFiles的琐碎和多余使用之外,这里根本没有NIO,所以很难看出你的问题实际上是什么。不过我会评论如下:

  1. create()方法是多余的。在构造类的实例时将创建目标文件,否则将抛出异常。

  2. 鉴于delete()File.delete()已存在,Files.delete()方法是多余的。

  3. 整个任务都是徒劳的。对象流不是随机访问。它们是严格的流。除非您知道在哪里寻求,否则您无法寻找它们,也没有提供API来获取该信息。