使用Java将数据附加到文件的正确方法

时间:2014-11-17 00:11:43

标签: java file-io append filewriter printwriter

对于此代码,我想模拟老虎机并将游戏的用户名和分数放在名为scores.txt的文本文件中,这样如果用户选择选项2,他们就可以查看他们的分数。

但是,我在FileWriter语句中收到了很多错误(行到了最后并标有注释),特别是我不理解为CP1252编码的不可映射字符。从我检查的所有地方,当有人使用像日语字符这样的不同字符时,我看到这个错误 - 那么为什么会出现这样的错误呢?我查看了代码示例,但我还没有学过流,尝试捕获或缓冲。

使用filewriter和printwriter 有人可以向我解释如何创建文件编写器对象并将其正确传递给printwriter对象,以及如何正确读取该文件中的数据(scores.txt) 。非常感谢,如果这是一个简单的错误,那就很抱歉。

问题的具体领域:

File file = new File(“scores.txt”); //illegal start of expression

    if (!file.exists())
    {
        file.createNewFile();
    }

    Scanner inputFile = new Scanner(file);
    String line = inputReader.nextLine();
    FileWriter fwriter = new FileWriter(“scores.txt”, true); //this is where the error CP1252, 
    PrintWriter outputWriter = new PrintWriter(file);
    outputFile.println(username);
    outputFile.println(userFinalTotal);

}

else if (option == 2)
{
    if (file.exists())
    {   
        while (inputFile.hasNext())
        {
            username = inputFile.nextLine();
            System.out.println ("Name\n------\n" + name + "\n");
            userFinaltotal = inputFile.nextDouble();
            System.out.printf("Scores\n------\n$%.2f\n", userFinalTotal);
            System.out.println();  
            inputReader.close();
        }

以下是查看变量来源的完整程序。

import java.util.Scanner;
import java.util.Random;
import java.io.*;

public class SlotsMachine
{
public static void main(String[] args) throws IOException
{
    int number;

    System.out.println ("Welcome to the Slot Machine Simulator!");
    System.out.println ("\nActions\n1. Start a new game\n2. Scores\n3. Exit");
    System.out.print ("\nPlease select an action: ");

    Scanner keyboard = new Scanner(System.in);
    int option = keyboard.nextInt();

    while (option != 1 && option != 2 && option != 3)
    {
    System.out.print ("\nThat is not an option. Please select an item number between 1-3: ");
    option = keyboard.nextInt();
    break;
    }

    if (option == 1)
    {
        String username; 
        double startingTotal = 100.0;
        double userTotal = startingTotal;

        System.out.print ("\nBefore the game begins, please enter your name: ");
        username = keyboard.next( );
        System.out.print ("\nGame start! You will begin with $100.00. Enter a negative value to quit the game. Good luck, " + username + "!");

        do
        {
            double bet = keyboard.nextDouble();
            bet = 0.0;
            userTotal = startingTotal - bet;

            System.out.print ("You currently have: " + startingTotal + "\nHow much would you like to bet?");

            double winnings = 0.0;
            double userFinalTotal = 0.0;

            if ((bet < 0) || (userFinalTotal <= 0))
            {
                break;
            }

            while (bet > userFinalTotal)
            {
                System.out.print("\nYour bet is greater than your current total. Please enter a valid amount: ");
                bet = keyboard.nextDouble();
            }

            Random generator = new Random();
            int slot1 = generator.nextInt(6);
            keyboard.nextLine();

            int slot2 = generator.nextInt(6);

            int slot3 = generator.nextInt(6);

            String firstSlot = "";

            switch (slot1)
            {
                case 0:
                    firstSlot = "Cherries";
                    break;
                case 1:
                    firstSlot = "Oranges";
                    break;
                case 2:
                    firstSlot = "Plums";
                    break;
                case 3:
                    firstSlot = "Bells";
                    break;
                case 4:
                    firstSlot = "Melons";
                    break;
                case 5:
                    firstSlot = "Bars";
                    break;
            }

            String secondSlot = "";

            switch (slot2)
            {
                case 0:
                    secondSlot = "Cherries";
                    break;
                case 1:
                    secondSlot = "Oranges";
                    break;
                case 2:
                    secondSlot = "Plums";
                    break;
                case 3:
                    secondSlot = "Bells";
                    break;
                case 4:
                    secondSlot = "Melons";
                    break;
                case 5:
                    secondSlot = "Bars";
                    break;
            }

            String thirdSlot = "";

            switch (slot3)
            {
                case 0:
                    thirdSlot = "Cherries";
                    break;
                case 1:
                    thirdSlot = "Oranges";
                    break;
                case 2:
                    thirdSlot = "Plums";
                    break;
                case 3:
                    thirdSlot = "Bells";
                    break;
                case 4:
                    thirdSlot = "Melons";
                    break;
                case 5:
                    thirdSlot = "Bars";
                    break;
            }

            System.out.println ("-------------------------------");
            System.out.println ("" + firstSlot + "    " + secondSlot + "    " + thirdSlot);
            System.out.print ("-------------------------------");

            if (slot1 == slot2 && slot1 == slot3)
            {
                winnings = bet * 3;
                userFinalTotal = userTotal + winnings;
                System.out.printf ("\nNumber of matches: 3. You win: $%.2f", winnings); 
                System.out.printf ("\nYou currently have: $%.2f", userFinalTotal);
            }
            else if ((slot1 == slot2 && slot2 != slot3) || (slot1 == slot3 && slot1 != slot2) || (slot2 == slot3 && slot3 != slot1))
            {   
                winnings = bet * 2;
                userFinalTotal = userTotal + winnings;
                System.out.printf ("\nNumber of matches: 2. You win: $%.2f", winnings);
                System.out.printf ("\nYou currently have: $%.2fn", userFinalTotal);
            }   
            else
            {
                System.out.printf ("\nNumber of matches: 0. You win: $%.2f", winnings);
                System.out.printf ("\nYou currently have: $%.2f", userFinalTotal);
            }       
        } while (userTotal > 0);

        File file = new File(“scores.txt”); //illegal start of expression

        if (!file.exists())
        {
            file.createNewFile();
        }

        Scanner inputFile = new Scanner(file);
        String line = inputReader.nextLine();
        FileWriter fwriter = new FileWriter(“scores.txt”, true); //this is where the error CP1252
        PrintWriter outputWriter = new PrintWriter(file);
        outputFile.println(username);
        outputFile.println(userFinalTotal);

    }

    else if (option == 2)
    {
        if (file.exists())
        {   
            while (inputFile.hasNext())
            {
                username = inputFile.nextLine();
                System.out.println ("Name\n------\n" + name + "\n");
                userFinaltotal = inputFile.nextDouble();
                System.out.printf("Scores\n------\n$%.2f\n", userFinalTotal);
                System.out.println();  
                inputReader.close();
            }
        }
        else
        {   
            System.out.println("There are no scores to display at this time.");
        }

        System.out.println("Actions:");
        System.out.print("1. Start a new game\n2. View scores\n3. Exit ");

        System.out.println("Please select an action: "); 
        option = keyboard.nextInt();
    }

    else if (number == 3)
    {
        System.out.print ("\nGoodbye!");
        System.exit(0);
    } 
}

}

1 个答案:

答案 0 :(得分:0)

现在编译,唯一的问题是它多次打印得分     import java.util.Scanner;     import java.util.Random;     import java.io。*;

public class Slot3
{
public static void main(String[] args) throws IOException
{
    System.out.println ("Welcome to the Slot Machine Simulator!");

    int option = 0;

    //if the user selects a 1 or 2 (does not want to exit) then this loop will run
    do
    {
        System.out.println ("\nActions\n1. Start a new game\n2. Scores\n3. Exit");
        System.out.print ("\nPlease select an action: ");

        Scanner keyboard = new Scanner(System.in);
        option = keyboard.nextInt();
        keyboard.nextLine();

        while (option != 1 && option != 2 && option != 3)
        {
            System.out.print ("\nThat is not an option. Please select an item number between 1-3: ");
            option = keyboard.nextInt();
            keyboard.nextLine();
        }

        //this will occur if the user selects 1 to play the game
        if (option == 1)
        {
            double money = 100.00;
            double bet = 0.00;
            double winnings = 0.00;
            double score = 0.00;
            int count = 0;

            System.out.print ("\nBefore the game begins, please enter your name: ");
            String username = keyboard.nextLine();

            System.out.print ("\nGame start! You will begin with $100.00. Enter a negative value to quit the game. Good luck, " + username + "!");

            System.out.printf("\nYou currently have $%.2f.", 100.00);

            do 
            {
                System.out.printf("\n\nHow much would you like to bet? ");
                bet = keyboard.nextDouble();

                if ((bet < 0) || (money <= 0))
                {
                    break;
                }

                while (bet > money)
                {
                    System.out.print("\nYour bet is greater than your current total. Please enter a valid amount: ");
                    bet = keyboard.nextDouble();
                }

                //create random numbers
                Random generator = new Random();
                int slot1 = generator.nextInt(6);

                int slot2 = generator.nextInt(6);

                int slot3 = generator.nextInt(6);

                String firstSlot = "";

                switch (slot1)
                {
                    case 0:
                        firstSlot = "Cherries";
                        break;
                    case 1:
                        firstSlot = "Oranges";
                        break;
                    case 2:
                        firstSlot = "Plums";
                        break;
                    case 3:
                        firstSlot = "Bells";
                        break;
                    case 4:
                        firstSlot = "Melons";
                        break;
                    case 5:
                        firstSlot = "Bars";
                        break;
                }

                String secondSlot = "";

                switch (slot2)
                {
                    case 0:
                        secondSlot = "Cherries";
                        break;
                    case 1:
                        secondSlot = "Oranges";
                        break;
                    case 2:
                        secondSlot = "Plums";
                        break;
                    case 3:
                        secondSlot = "Bells";
                        break;
                    case 4:
                        secondSlot = "Melons";
                        break;
                    case 5:
                        secondSlot = "Bars";
                        break;
                }

                String thirdSlot = "";

                switch (slot3)
                {
                    case 0:
                        thirdSlot = "Cherries";
                        break;
                    case 1:
                        thirdSlot = "Oranges";
                        break;
                    case 2:
                        thirdSlot = "Plums";
                        break;
                    case 3:
                        thirdSlot = "Bells";
                        break;
                    case 4:
                        thirdSlot = "Melons";
                        break;
                    case 5:
                        thirdSlot = "Bars";
                        break;
                }

                System.out.println ("\n-------------------------------");
                System.out.printf ("%-12s%-10s%5s\n", firstSlot , secondSlot , thirdSlot);
                System.out.print ("\n-------------------------------");

                //check how many of the slots match to calculate the winnings
                if (slot1 == slot2 && slot1 == slot3)
                {
                    winnings = bet * 3;
                    money -= bet;
                    score = money + winnings;
                    System.out.printf ("\nNumber of matches: 3. You win: $%.2f", winnings); 
                     System.out.printf("\nYou currently have: $%.2f", score);
                }
                else if ((slot1 == slot2 && slot2 != slot3) || (slot1 == slot3 && slot1 != slot2) || (slot2 == slot3 && slot3 != slot1))
                {   
                    winnings = bet * 2;
                    money -= bet;
                    score = money + winnings;
                    System.out.printf ("\nNumber of matches: 2. You win: $%.2f", winnings);
                    System.out.printf("\nYou currently have: $%.2f", score);
                }   
                else
                {
                    winnings = bet * 0;
                    money -= bet;
                    score = money + winnings;
                    System.out.printf ("\nNumber of matches: 0. You win: $%.2f", winnings);
                    System.out.printf("\nYou currently have: $%.2f", score);
                }     
            } while ((bet > 0) && (money > 0)); 

            FileWriter fwriter = new FileWriter("scores.txt", true);
            PrintWriter outputWriter = new PrintWriter(fwriter);
            outputWriter.printf("\n\n%1s%15s" , "Name" , "Score");
            outputWriter.printf ("\n\n%1s%15s" , "----" , "-----");
            outputWriter.printf ("\n\n%1s%15s" , username , score);
            outputWriter.close();

            System.out.println("\n\nGame over! Your score has been written to scores.txt, " + username + "!");

        } //end of actions for select option 1

        //option 2 user wants to read their scores
        if (option == 2)
        {
            File myFile = new File("scores.txt");

            //if there are no scores to read
            if (!myFile.exists())
            {   
                System.out.println("There are no scores to display at this time.");
                continue;
            }

            File file = new File("scores.txt");

            Scanner inputFile = new Scanner(file);

            while (inputFile.hasNext())
            {
                String username = inputFile.nextLine(); 

                System.out.println(username);
            }
            inputFile.close();
        } //close option 2
    } while (option != 3); //close 1st do-while loop

    if (option == 3)
    {
        System.out.print ("\nGoodbye!");
        System.exit(0);
    } 
}

}