java - 为什么在通过 ANT 运行时我的文件无法正确读取

标签 java ant

我有一套在 Eclipse 中运行的单元测试,它们都运行良好。它们依赖于从大于 20MB 的非常大的文件加载的数据。 但是,当我从 ANT 运行单元测试时,测试失败,因为某些数据未加载。发生的事情是我的文件读取机制没有读取整个文件,它只是停止了,在读取了 900,000 行中的大约 10,000 行之后没有给出任何错误

这是我的文件读取代码

    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");
}

这是网络应用程序的一部分。 Web 应用程序也工作正常,整个文件都加载到内存中。 如果我的单元测试所依赖的数据包含在前 10,000 行中,那么单元测试可以通过 ANT。 我唯一能想到的是它一定是内存问题,但为什么我没有抛出异常。 我从 Eclipse 中运行我的 ANT 目标。它配置了与我的 Eclipse JUnit 运行程序相同的 JVM 参数,即 -Xms512m -Xmx1234m。我知道它正确地选择了这些,因为如果 ANT 使用默认的 JVM 参数启动,那么它将因堆错误而失败。 还有什么我可以检查的其他想法吗?

最佳答案

Scanner 类型吞噬了 I/O 错误。您必须使用 ioException() 显式检查错误方法。

如果问题是编码错误,您需要 pass the encoding of the file explicitly当您实例化扫描仪时。

如果文件是损坏的文本文件,您可能需要提供 your own reader做更多的容错解码。应尽可能避免这种情况,因为它不太正确。

关于java - 为什么在通过 ANT 运行时我的文件无法正确读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13818098/

相关文章:

Java多线程作用域Thread.sleep

grails - grails Ant 脚本找不到 Spring jar

java - error=2,在 java.lang.ProcessBuilder.start 处没有这样的文件或目录

eclipse - Eclipse 如何调用它的 Ant 插件?

java - 简单的结构类型 XML 数据绑定(bind)(无需代码生成或反射)

java - 从 Activity 外的类(class)发起 Intent

java.lang.IllegalStateException : Already connected(Discord JDA)

Java - GMail API - 授权码

文件/build.properties 丢失时的 Ant 警告/失败?

java - 为什么 ant 中的 javac 使用不兼容的类型构建脚本错误