Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 为什么在运行ANT时无法正确读取我的文件_Java_Ant - Fatal编程技术网

Java 为什么在运行ANT时无法正确读取我的文件

Java 为什么在运行ANT时无法正确读取我的文件,java,ant,Java,Ant,我有一套在Eclipse中运行的单元测试,它们都可以正常工作。它们取决于从一个非常大的大于20MB的文件加载的数据。 但是,当我从ANT运行单元测试时,测试失败,因为一些数据没有加载。发生的情况是,我的文件读取机制没有读取整个文件,它只是停止,在读取了900000行中的10000行之后,没有给出任何错误 这是我的文件读取代码 private static void initializeListWithFileContents( TreeMap<String, Lis

我有一套在Eclipse中运行的单元测试,它们都可以正常工作。它们取决于从一个非常大的大于20MB的文件加载的数据。 但是,当我从ANT运行单元测试时,测试失败,因为一些数据没有加载。发生的情况是,我的文件读取机制没有读取整个文件,它只是停止,在读取了900000行中的10000行之后,没有给出任何错误

这是我的文件读取代码

    private static void initializeListWithFileContents(
        TreeMap<String, List<String>> treeMap, String fileName)
{
    File file = new File(fileName);
    Scanner scanner = null;
    int count = 0;
    try
    {

        scanner = new Scanner(file);
        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine().toLowerCase().trim();      
            String[] tokens = line.split(" ");

            if (tokens.length == 3)
            {
                String key = tokens[0] + tokens[1];
                if (treeMap.containsKey(key))
                {
                    List<String> list = treeMap.get(key);
                    list.add(tokens[2]);
                }
                else
                {
                    List<String> list = new ArrayList<String>();
                    list.add(tokens[2]);
                    treeMap.put(key, list);
                }
                count++;
            }
        }           
        scanner.close();
    }

    catch (IOException ioe)
    {
        ioe.printStackTrace();
    }
    System.out.println(count + " rows added");
}
private static void initializeListWithFileContents(
树映射树映射,字符串文件名)
{
文件=新文件(文件名);
扫描器=空;
整数计数=0;
尝试
{
扫描仪=新扫描仪(文件);
while(scanner.hasNextLine())
{
字符串行=scanner.nextLine().toLowerCase().trim();
String[]tokens=line.split(“”);
if(tokens.length==3)
{
字符串键=令牌[0]+令牌[1];
if(树映射容器(键))
{
List=treeMap.get(key);
列表。添加(令牌[2]);
}
其他的
{
列表=新的ArrayList();
列表。添加(令牌[2]);
树映射放置(键、列表);
}
计数++;
}
}           
scanner.close();
}
捕获(ioe异常ioe)
{
ioe.printStackTrace();
}
System.out.println(计数+“添加行”);
}
这是Web应用程序的一部分。web应用程序也可以正常工作,整个文件都加载到内存中。 如果我的单元测试所依赖的数据包含在前10000行中,那么ANT的单元测试通过ok。 我唯一能想到的是它一定是内存问题,但为什么我没有得到一个异常抛出。 我在Eclipse中运行我的ANT目标。它使用与我的Eclipse JUnit runner相同的JVM参数配置,即-Xms512m-Xmx1234m。我知道它正确地拾取了这些参数,因为如果ANT使用默认JVM参数启动,那么它将因堆错误而失败。
还有什么我可以检查的吗?

扫描仪类型会吞噬I/O错误。必须使用该方法显式检查错误

如果问题是编码错误,则需要在实例化扫描仪时进行修改


如果文件是损坏的文本文件,则可能需要提供更具容错性的解码。如果可能的话,应该避免这种情况,因为它不太正确。

@McDowell,原来是扫描仪出了问题,它在读取文件时确实吸收了一些io错误。我不知道为什么它只在ANT下运行时出现问题,因为在所有情况下,我都使用完全相同的JVM,即在Eclipse、Tomcat和ANT下运行时