如何使用Java将文本文件中的数据读入数组

时间:2013-04-18 15:23:03

标签: java arrays file

我遇到编程任务有问题。我需要从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,表明读取数据的代码不起作用。

任何建议或指导都非常赞赏,因为它在这一点上变得令人沮丧。

3 个答案:

答案 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++; 
}