Java:我在哪里可以找到高级文件操作的源代码/库?

3
我正在写入任意字节数组(32字节的模拟病毒签名)到任意文件中,我需要代码来覆盖给定文件中的特定偏移量。我的具体问题是:是否有可用于执行此特定任务的源代码/库?
我在Python文件操作中也遇到了这个问题。我正在寻找一组可以删除行、剪切/复制/粘贴等操作的函数。我的假设是这些是极其常见的任务,但我在Java API和谷歌搜索中都没有找到。
很抱歉我没有好好阅读文档;我还没有找到任何信息,我已经找了一段时间了。

文件有多大?您可能需要查看FileChannel(http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html)和NIO的其他部分。 - Matthew Flaschen
5个回答

5
也许你正在寻找类似于标准Java JDK中的RandomAccessFile类。它支持在某个偏移量处进行读写,以及字节数组。

2
是的,太棒了。这正是我想要的。 - montooner

4
Java的RandomAccessFile正是您想要的。它包括seek(long)等方法,允许您在文件中移动到任何位置。它还允许同时读取和写入。

RandomAccessFile可能作为基础(个人会使用FileChannel),但是需要大量的工作才能够在文件中间删除或插入数据。 - erickson

2
据我所知,Java主要具有直接操作文件的较低级别功能。以下是我能想到的最好的方法:
  1. 你所描述的操作在Swing世界中是标准的,对于文本来说,它归结为操作一个Document对象。这些操作都是在内存中进行的。类java.nio.channels.FileChannel具有类似的方法,可以直接操作文件。它们都不能自动找到行尾,但是java.iojava.nio中的其他类可以实现。

  2. Apache Commons有一个名为Flatfile的沙盒库,看起来它可以实现你想要的功能。问题是目前还没有发布代码。不过,你可以与正在开发该库的人交流,获取更多的想法。我没有对库进行全面检查。


0

虽然将字节数组写入文件是一项常见的任务,但一次写入32字节的字节数组到给定文件中并不是你会在java.io中找到的 :)

想要开始,以下方法和注释是否对您来说看起来合理?我敢打赌这里的某个人,甚至包括我自己,可以很快完成它。

public static void writeFauxVirusSignature(File file, byte[] bytes, long offset) {
    //open file
    //move to offset
    //write bytes
    //close file
}

问题:

  • 潜在目标文件有多大?
  • 您需要性能吗?

我问这个问题是因为干净、易读的代码将使用Apache Commons库,但在性能敏感的环境中进行大文件写入将需要使用java.nio库。


0

你有用过File/FileReader/FileWriter/BufferedReader吗?你可以获取文件的内容并对其进行操作,你可以在文件中搜索数据,覆盖文件,创建新文件,附加到现有文件……

我不确定这是否完全符合你的要求,但我经常使用这些API进行日志记录,RTF编辑器,文本文件创建以供电子邮件使用等多种任务。

至于剪切/复制/粘贴,我没有直接遇到过这样的能力,但是,你可以输出文件的内容,然后“复制”你想要的部分,并将其“粘贴”到一个新文件中,或者附加到现有文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接