如何将文本文件读入对象数组

时间:2015-03-15 17:45:53

标签: java arrays object

我正在尝试使用FileReader读取文本文件。

要读取的文本文件与使用StoreData过程写入的文本文件相同。

我试图让程序读入.txt文件中的名称并将它们放入'mainName'类中的Room字符串中(见下文)。

显然,从文本文件中读取的每个名称都需要单独的Room'宾语。请更正' loadData'中的代码。程序

public class HotelObjects {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws Exception {
    String command;

    Scanner input = new Scanner(System.in);

    Room[] myHotel = new Room[10];
    for (int x = 0; x < myHotel.length; x++) {
    myHotel[x] = new Room();
    }

    String roomName;
    int roomNum = 0;

    while (roomNum < 11) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter command : ");
        command = input.next();
        command = command.toLowerCase();

        if (command.charAt(0) == 'v') {
            viewCustomers(myHotel);
        }

        if (command.charAt(0) == 'a') {
            addCustomers(myHotel);
        }

        if (command.charAt(0) == 'e') {
            emptyRooms(myHotel);
        }

        if (command.charAt(0) == 's') {
            storeData(myHotel);
        }

        if (command.charAt(0) == 'l') {
            loadData(myHotel);
        }

    }
}

private static void viewCustomers(Room hotelRef []) {
    for (int x = 0; x < 10; x++) {
            System.out.println("room " + x + " occupied by " + hotelRef[x].getName());
        }
}

private static void addCustomers(Room myHotel[]) {
    String roomName;
    int roomNum;
    System.out.println("Enter room number (0-10) or 11 to stop:");
    Scanner input = new Scanner(System.in);
        roomNum = input.nextInt();
        System.out.println("Enter name for room " + roomNum + " :");
        roomName = input.next();
        myHotel[roomNum].setName(roomName);
}

private static void emptyRooms(Room[] myHotel) {
    for (int x = 0; x < 10; x++ )
        if (myHotel[x].getName().equals("e"))System.out.println("room " + x + " is empty");
}

private static void storeData(Room [] myHotel) throws IOException {
    FileWriter writer = new FileWriter("HotelObjects.txt");
    for (int x = 0; x < 10; x++) {
        writer.write(myHotel[x].getName());
        writer.write("\r\n");
    }
    writer.close();
    System.out.println("File 'HotelObjects.txt' saved to C:\\Users\\Ganz\\Documents\\NetBeansProjects\\HotelObjects");
}


private static void loadData(Room[] myHotel) throws Exception {
    int lineCount =0 ;
    try {
        Scanner sc = new Scanner(new BufferedReader(new FileReader("C:\\Users\\Ganz\\Documents\\NetBeansProjects\\Hotel\\HotelArray.txt")));
        String fileLine;
        while (sc.hasNext()) {
            fileLine = sc.nextLine();
            myHotel[fileLine].setName();
            lineCount++;
        }
        sc.close();
        System.out.println("File 'HotelArray.txt' loaded from C:\\Users\\Ganz\\Documents\\NetBeansProjects\\Hotel");
    }
    catch (IOException e) {
    }
}
}

这是Room类:

public class Room {


private String mainName;
int guestsInRoom;

public Room() {
    mainName = "e";
    System.out.println("made a room ");
}

public void setName(String aName) {
    mainName = aName;
}

public String getName() {
    return mainName;
}
}

2 个答案:

答案 0 :(得分:0)

myHotel[fileLine].setName();

首先需要一个字符串参数,如下所示:

public void setName(String aName) {

你是在没有参数的情况下调用它,这显然是lead to an error and your code will not compile and run.

其次它需要 myHotel [] 的整数参数

如果要将名称设置为行字符串并使用lineCount作为整数索引,请将其更改为:

myHotel[lineCount].setName(fileLine);

或者您可以使用其他index替换lineCount,但必须是整数。然后它应该工作。

答案 1 :(得分:0)

fileLine是一个String。您不能像这样使用String作为数组索引:

String fileLine;
... (modify fileLine)
myHotel[fileLine].setName();

如果要将String映射到对象,可以使用Map。

您需要使用整数作为数组索引。 e.g:

myHotel[4].setName();

此外,setName()接受一个String参数,并且您没有传递任何参数。它应该像这样使用:

 myHotel[4].setName("some string");

因此,此行有两个错误:myHotel[fileLine].setName();