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