Java jar执行机器之间的差异

时间:2017-02-14 21:44:46

标签: java regex

我编写了一些代码,通过检查每个字段与一些正则表达式来验证逗号分隔文件的内容 - 导致我悲伤的特定正则表达式是一个非常基本的日期正则表达式(\\d{2}/\\d{2}/\\d{2})。如果该字段中的数据不匹配,则应该写出一个单独的文件,表明需要对其进行检查,如下所示:

private static int DATE_FIELD = 5;
File input = new File("input.txt");
Pattern p = Pattern.compile("\\d{2}/\\d{2}/\\d{2}");
BufferedReader reader = new BufferedReader(new FileReader(input));
String line = reader.readLine();
while(line != null){
    String[] splitLine = line.split(",");    
    Matcher m = p.matcher(splitLine[DATE_FIELD]);
    if(!m.matches) {
        // write warning to separate file
    }
    line = reader.readLine();
}

此代码是作为更大的JAR文件的一部分编译的,该文件安装在办公室的4台计算机上(我和其他3台)。 jar文件通过由单独程序进行的shell调用来调用,并传入相关参数。在我们将数据导入数据库之前,这是QC检查的一部分,并且日期是必填字段,因此如果日期字段留空,则应标记为要审核。

我使用的正则表达式不应该允许空白日期传递,当我在我的机器上运行它时,它正确地标记了缺少的日期。但是,在我的同事机器上,空白日期在某种程度上没有被标记,好像根本没有检查字段,这导致文件被导入数据库时​​有点悲伤。

换句话说,我们的机器之间存在一些差异,导致代码在他们的机器上执行不正确,而不是我的。所有机器都有Java 8(不确定哪个版本,但它们应该都是相同的版本)。怎么可能?

1 个答案:

答案 0 :(得分:2)

  • 您需要指定要阅读的文件的编码。 [{1}}的构造函数通常使用平台默认编码。因此,请确定实际编码并使用FileReader
  • 之类的内容
  • 检查每台计算机的java版本。验证指定的java实际上是否被调用
  • 检查文件本身的编码(UTF-8,CP1252或......)