2011-04-04 51 views
0

我有一个项目,我需要操纵文件。诸如:按照定义的结构(标题,数据,轨迹)创建新文件。然后我需要搜索/验证/创建/读取。文件操作库

基本上我想要的文件映射对象,反之亦然。(我愿意将它们映射到对象堂妹它会更舒服,我来操纵通过对象的每个文件中的字段)

我想知道你们之前有没有处理过这种事情?也许可以推荐我的图书馆,这可能会使我的工作变得简单。

谢谢, 射线。

回答

1

最后我找到了一个名为Canyon的ORM框架,它将文件映射到对象。但仍然有困难。所以我已经将自己的ORM文件实现为对象,反之亦然。

1

你可能想看看序列化和反序列化

+0

序列化不会帮助我在这里。我想在文件中使用自己的结构,因为其他人需要通过特定的结构来读取它。序列化不会以我想要的方式将对象映射到文件。 – rayman 2011-04-04 09:14:31

0

如果你有,你应该考虑使用模板引擎像FreeMarkerVelocity生成您的文件不同的内容定义的文件布局。 您可以在此处定义模板,这些模板将充满您必须提供的动态内容。明确地比使用System.out(我的意思是硬编码你的模板文本)更好。

帮助基本文件操作的库是Apache Commons IO

如果你真的想把你的文件映射到对象上,那么就像Angelom提到的那样,它将是一个序列化/反序列化。许多图书馆帮助你做到这一点,但该文件的格式是固定的:

JSON:JacksonGSON
XML:JAXB

+0

这些库能够合理地生成二进制输出吗?据我所知,他们专注于基于文本的输出格式。 – 2011-04-04 10:17:03

+0

@Joachim图书馆工作与文本输出(这是什么_rayman_需要,如果我理解它是正确的)。 – FrVaBe 2011-04-04 11:08:07

+0

他没有提到他是否想要文本或二进制文件,实际上是从我所了解的他想要的库来帮助他解析/阅读。这就是那些模板库平坦的地方。 – 2011-04-04 11:23:58

1

如果你想自定义映射,你需要自定义编码。我建议你看看DataInputStream和DataOutputStream。

使用这些,你可以控制你想要的任何二进制格式的标题,记录和页脚。

我建议你生成你的序列化(如果你需要有最快的速度)或使用反射做翻译。使用反射比生成代码更快,更简单。 ;)

+1

但序列化将使它成为二进制。我想要它重新文本。 – rayman 2011-04-04 10:25:55

+0

在这种情况下,我会序列化为文本。 ;)使用内置的序列化你没有选择,但如果你自己做,你可以做任何你想要的。例如,我的所有对象都以CSV格式序列化和反序列化,即您可以在Excel中读取它。 ;)您可以在XStream中使用XML或JSon。 – 2011-04-04 10:28:42

0

如果您还希望第三方读取的文件,那么如何使用一些流行的现有交换格式,如CSV或XML?

标准库完全支持XML。这里有很多CSV库,包括Apache Commons CSV

+0

我不需要使用XML格式。只有公司定义的特定格式。该格式是TXT,我想将所有这些文件转换为对象。就像ORM – rayman 2011-04-06 05:58:53