我遇到编程任务有问题。我需要从txt文件中读取数据并将其存储在并行数组中。 txt文件内容的格式如下:
Line1: Stringwith466numbers
Line2: String with a few words
Line3(int): 4
Line4: Stringwith4643numbers
Line5: String with another few words
Line6(int): 9
注意:“Line1:”,“Line2:”等仅用于显示目的,实际上并不在txt文件中。
正如你所看到的,它以三种模式出现。 txt文件的每个条目是三行,两个字符串和一个int。
我想将第一行读入数组,第二行读入另一行,第三行读入int数组。然后第四行将添加到第一个数组,第五行将添加到第二个数组,第六行将添加到第三个数组。
我曾尝试为此编写代码,但无法使其正常工作:
//Create Parallel Arrays
String[] moduleCodes = new String[3];
String[] moduleNames = new String[3];
int[] numberOfStudents = new int[3];
String fileName = "myfile.txt";
readFileContent(fileName, moduleCodes, moduleNames, numberOfStudents);
private static void readFileContent(String fileName, String[] moduleCodes, String[] moduleNames, int[] numberOfStudents) throws FileNotFoundException {
// Create File Object
File file = new File(fileName);
if (file.exists())
{
Scanner scan = new Scanner(file);
int counter = 0;
while(scan.hasNext())
{
String code = scan.next();
String moduleName = scan.next();
int totalPurchase = scan.nextInt();
moduleCodes[counter] = code;
moduleNames[counter] = moduleName;
numberOfStudents[counter] = totalPurchase;
counter++;
}
}
}
上述代码无法正常运行。当我尝试打印出数组的元素时。它为字符串数组返回null,为int数组返回0,表明读取数据的代码不起作用。
任何建议或指导都非常赞赏,因为它在这一点上变得令人沮丧。
答案 0 :(得分:1)
仅显示null
的事实表明该文件不存在或为空(如果您正确打印)。
最好进行一些检查以确保一切正常:
if (!file.exists())
System.out.println("The file " + fileName + " doesn't exist!");
或者您实际上可以跳过上述内容并在代码中取出if (file.exists())
行并让FileNotFoundException
被抛出。
另一个问题是next
通过空格分割事物(默认情况下),问题是第二行上有空格。
nextLine
应该有效:
String code = scan.nextLine();
String moduleName = scan.nextLine();
int totalPurchase = Integer.parseInt(scan.nextLine());
或者,更改分隔符也应该有效:(使用您的代码)
scan.useDelimiter("\\r?\\n");
答案 1 :(得分:0)
String code = scan.nextLine();
String moduleName = scan.nextLine();
int totalPurchase = scan.nextInt();
scan.nextLine()
这会在阅读int
后将扫描仪移动到正确的位置。
答案 2 :(得分:0)
你正在读行,所以试试这个:
while(scan.hasNextLine()){
String code = scan.nextLine();
String moduleName = scan.nextLine();
int totalPurchase = Integer.pasreInt(scan.nextLine().trim());
moduleCodes[counter] = code;
moduleNames[counter] = moduleName;
numberOfStudents[counter] = totalPurchase;
counter++;
}