0

我正在使用 jaxb 和 XmlStreamWriter 在 java 中创建一个 xml 文件。这将成为一个非常大的文件,并且必须分成几块 max。200MB。这些片段不应该是可读的 xml 了。

该文件的名称使用日期和几个参数非常具体,最后它们的编号如下:'3.1'、'3.2'、'3.3' 其中第一个数字是创建的块数,第二个数字是文件的以下编号。文件名的第一部分(除了编号)是在 java 应用程序中创建的。

现在我想创建一个 UNIX 脚本,它使用所需的参数调用 java 应用程序,拆分文件并重命名块。

我知道调用 java 应用程序以及拆分和重命名文件的命令,但我不知道如何组合它们,因为我现在只有 Java 应用程序中的文件名,所以我无法决定必须拆分和重命名哪个文件。

有谁知道如何处理它?

编辑:好的,我会尽量不那么含糊。

我创建的应用程序创建了非常大的 xml 文件。此文件的名称采用以下格式:FI.DB2P.107601.20130130.20010.T.1.1。此名称包含一些标识号和文件的创建日期。名称的第一部分在 Java 应用程序中创建,如下所示:FI.DB2P.107601.20130130.20010.T。

现在这个文件应该被分成几个最大的块。每个 200 MB。然后创建的块应该与'base-file'具有相同的名称,但它们必须以'T.3.1'、'T.3.2'和'T.3.3'结尾。

我现在的问题是如何获得由 Unix 脚本中的 java 应用程序创建的文件的文件名。文件名非常复杂,包含来自数据库的数据,因此我无法在 Unix 脚本中定义名称。

我希望现在更清楚一点。

4

2 回答 2

0

除非我误解了你应该很容易做到的问题。当您创建您的文件时XMLStreamWriter,您知道(希望)文件的名称:

String fileName = "FI.DB2P.107601.20130130.20010.T.1.1";
XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter(fileName ));

那么把这个名字作为参数传递给你的shell脚本就没有问题了:

Runtime.getRuntime().exec("yourscript.sh " + fileName);

yourscript.sh将有代码来拆分文件并向文件名添加递增变量,这样的事情可能会起作用:

#!/bin/bash
split -b 200m -a 5 "$1" splited_file

i=1
for file in splited_file*
do
 mv $file $1_${i}
 i=$(( i + 1 ))
done

ps:这个脚本不是线程安全的:)

于 2013-02-05T21:02:21.823 回答
0

是不是您的 Java 进程将调用 Unix 脚本并因此能够在命令行上将文件名传递给它。

Unix 脚本可以获取文件名并在其上运行类似split的东西,然后将文件名修复为您的 Java 进程所期望的文件名。

于 2013-02-05T20:46:16.707 回答