Java扫描程序资源泄漏,。close()不会关闭多个分配

时间:2013-11-21 22:09:10

标签: java

当我有多个任务时,我的扫描仪不会关闭.. 使用此代码,我在[second in = new Scanner(textfile);]

中获得资源泄漏

但是,如果我使用新的扫描仪,它可以工作。 有什么办法吗? 也许可以让扫描仪再次进入第一行,这样我就不必再将扫描仪文本文件分配给它了?

public static String[][] lesFil(Scanner input) {

        Scanner in;
        String fileName = "d";

        try {

            in = new Scanner(textfile);

            while (in.hasNextLine()) {

                in.nextLine();
            }


            in = new Scanner(textfile);

            while (in.hasNextLine()) {

                in.nextLine();
            }
            in.close();

        } 
        catch (FileNotFoundException e) {


        }

        return null;
    }

编辑:首先while循环计算文本文件中的行数(设置数组大小),然后第二个while将文件数据存储在字符串数组中。

2 个答案:

答案 0 :(得分:2)

答案显而易见,您应该关闭扫描仪,然后再将“输入”分配给另一台扫描仪。

虽然您可能只是在同一次迭代中完成了两项任务,但IO是资源方面实际上相当昂贵的少数事情之一。

此外,如果您不需要直接使用扫描仪中的某些内容而只想读取行,那么为什么不使用FileReader和BufferedReader呢?如果您可以使用Java 7,您甚至可能想使用Files.readAllLines(参见https://stackoverflow.com/a/12838276/144578

答案 1 :(得分:0)

您可能更喜欢在第一次将每行读入ArrayList时,而不是使用两个while循环。

ArrayList<String> lineList = new ArrayList<String>();
while (in.hasNextLine())
{
    lineList.add(in.nextLine());
}
in.close();

String[] stringArray = new String[lineList.size()];
lineList.toArray(stringArray);

如果您想在阅读时跳转,我建议使用BufferedReader()而不是扫描仪并使用FileInputStream。