Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java验证文件格式_Java_Parsing_Validation - Fatal编程技术网

使用Java验证文件格式

使用Java验证文件格式,java,parsing,validation,Java,Parsing,Validation,我需要解析和验证一个格式有点复杂的文件 基本上,该文件采用以下格式: \n -- just to make clear it may have empty lines CLIENT_ID A_NUMERIC_VALUE ONE_LINE_OF_SOME_RANDOM_COMMENT_ABOUT_THE_CLIENT ANOTHER_LINE_OF_SOME_RADOM_COMMENT_ABOUT_THE_CLIENT \n \n CLIENT_ID

我需要解析和验证一个格式有点复杂的文件

基本上,该文件采用以下格式:

   \n -- just to make clear it may have empty lines
   CLIENT_ID
   A_NUMERIC_VALUE
   ONE_LINE_OF_SOME_RANDOM_COMMENT_ABOUT_THE_CLIENT
   ANOTHER_LINE_OF_SOME_RADOM_COMMENT_ABOUT_THE_CLIENT
   \n
   \n
   CLIENT_ID_2
   A_NUMERIC_VALUE_2
   ONE_LINE_OF_SOME_RANDOM_COMMENT_ABOUT_THE_CLIENT_2
   ANOTHER_LINE_OF_SOME_RADOM_COMMENT_ABOUT_THE_CLIENT_2
   OHH_THIS_ONE_HAS_THREE_LINES_OF_COMMENTS
这个文件很少会很大(10MB可能是我见过的最大的文件,通常大约有900kb-1mb)

所以我有两个问题:

1) 如何有效地验证文件的格式?使用正则表达式+扫描器?(我认为这是一个非常可行的选择,如果我可以将每个客户机条目转换为一个字符串,那么我就可以对其应用正则表达式)

2) 我需要将文件中的每个条目转换为客户机对象。我应该在将整个文件转换为Java对象之前验证它吗?或者,我应该在继续将文件条目转换为Java对象时验证该文件吗?(请记住,如果任何客户端条目无效,处理将立即停止,并引发异常-因此创建的任何对象都将被丢弃)

我真的很想听听你对问题1的建议。问题#2更像是我对你如何处理这种情况的好奇。如果愿意,请忽略2,但请回答1=)

顺便问一下,有人知道有什么框架可以帮助我处理文件吗

谢谢

更新:

我看到了这一点,问题与我的非常相似,但我不确定正则表达式是否是解决这个问题的最佳方法。文件中可能有很多“\n”,每个客户端条目的注释数和可选ID都不同,因此正则表达式必须非常复杂。这就是为什么我在问题#1中提到将每个条目转换为一行的原因,因为这样可以更容易地创建正则表达式来验证。。。然而,这个解决方案在我听来并不优雅:(


干杯。

如果发现任何零件无效,您打算使批处理失败,请首先验证文件

有几个优点。一个是验证和处理不需要同步。例如,如果您每天处理批处理,但一整天都收到文件,则可以一整天都对其进行验证,并在计划的处理之前通知更正问题。另一个是验证文件是否格式正确是非常重要的非常快

一个简短的perl脚本当然可以完成这项工作。如果我正确理解了模式,就不需要转换数据,而且都是向前读取的

read past any newlines
read and validate a client id
read and validate a numeric value
read and validate one or more comments until a blank line is found
repeat the above four steps until EOF or invalid data detected

对于您的第一个问题,这里有一些类似的问题:。请参阅答案的“性能问题编辑”。谢谢您的回答。我以前见过这个问题,这个问题与我的问题非常相似,但我不确定正则表达式是否是解决此问题的最佳方法。可能有很多“\n”在整个文件中,每个客户端条目和可选ID的注释数量都不尽相同,因此正则表达式必须非常复杂。这就是为什么我在问题1中提到将每个条目转换为一行,因为这样创建正则表达式来验证会容易得多……然而,这个解决方案听起来并不十分优雅我的耳朵:(渴望听到任何其他输入。干杯。我应该注意,这种验证也可以用Java以几乎相同的方式完成……但是如果处理和验证彼此独立,那么脚本语言可能更方便。