我必须以一种方法将文件名作为扫描程序的输入,并在所有其他方法中使用该扫描程序作为其余代码的文件路径的引用。
我正在学习文件I / O,对于这个项目,我应该以文件名作为输入,计算文件中的行数并将每行放入数组中。
我的问题是在FileUtils.countRecords
方法期间出现的。在返回FileUtils.openInputFile
中的文件类型之后,然后将这些数据放入并放入扫描仪中(代码中的变量inf和fin),我应该使用该扫描仪并使用它再次指向文件。 (File input=new File(scanner))
*我的教练给了我们一个提示,即“扫描仪位于EOF上,需要重新设置”,尽管我无法找到任何对我有帮助的“文件结尾”文档。
从主要方法开始(!无法更改!)
File inf = null;
int total, choice;
String [] words = null;
Scanner kb = new Scanner(System.in), fin = null;
inf = FileUtils.openInputFile(kb);
fin = new Scanner(inf);
total = FileUtils.countRecords(fin, 1);
fin.close();
FileUtils.openInputFile(kb)在获得文件路径后返回File类型。
public static int countRecords(java.util.Scanner fin,int linesPer)
{
File input = new File(fin.toString()); //fileNotFoundException here
File input = new File(fin); //also throws filenotfoundexception
当我尝试System.out.print(fin)
或System.out.print(fin.toString())
时,我得到了:
java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]
显然不是文件名或路径。我想知道在分配文件变量之前是否需要将扫描仪转换成其他东西。或者,如果有类似.toString()的东西将上述扫描仪属性转换为可读文本。或如何“将扫描仪重置为eof。”
答案 0 :(得分:0)
所以我想scanner fin
不包含路径/文件名。它是对打开文件本身的引用,因此,我要做的就是像这样对文件中的每一行进行计数:
while(fin.hasNext())
{
fin.nextLine();
count ++;
}