2013-11-21 32 views
0

我的扫描仪不会近身的时候我有多个分配给它.. 有了这个代码,我得到的[第二位=新扫描仪(文本文件)资源泄漏; ]Java的扫描仪资源泄漏,.close()不会关闭多任务

然而,如果IA新的扫描仪工作原理。 有什么办法吗? 也许有可能使扫描仪再次转到第一行,这样我就不必再将扫描仪文本文件分配给它了?

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循环计数在文本文件的行数(要设置一个数组的大小),则第二存储,同时在一个字符串数组的文件的数据。

+1

两次读取同一个文件的含义是什么? –

+0

您是否尝试在重新分配前将其设置为空? –

+0

第一次当我检查文本文件有多少行(设置数组大小) – user2725580

回答

2

答案似乎很明显,你应该重新分配你的“中”到另一个扫描仪前,关闭扫描仪。

虽然你可能应该只是你在同一个迭代有两个任务,IO是的几件事情,实际上是在资源方面相当昂贵的。

此外,如果您不需要直接从扫描仪的东西,只是想读线,为什么不使用的FileReader和BufferedReader呢?如果你可以使用Java 7,你甚至可以使用Files.readAllLines(参见https://stackoverflow.com/a/12838276/144578

0

而不是使用两个while循环,你可能更喜欢首次读取每一行到一个ArrayList。

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。