读取和写入文件无法正常工作

时间:2014-06-04 15:28:48

标签: java loops file-io

我一直在研究这个代码,几乎就在终点。我想要的是代码应该作为剪辑卡工作,记住购买咖啡的数量,并每10次购买时给客户一杯免费咖啡。我正在写一个文件并从中读取文件,以便客户能够在上次离开的地方继续他的剪辑卡。所以对我的问题...我已经正确地将我的“count”变量写入文件,并且它正确地存储它。但是,每次我再次运行程序时,它都会从0开始,我不明白为什么。我需要它来保存当前计数,并再次运行后读取计数。例如,如果客户之前购买了7个咖啡并且正在返回商店,那么他的柜台需要从7开始。出于某种原因,它不会这样做。

这是我到目前为止所拥有的:

public class FelixNeww {

    public static void main(String [] args) {
        Scanner key;
        String entry;
        int count = 0;
        String password = "knusan01";

        FelixNeww  f = new FelixNeww();

       System.out.println(f.readFromFile());

        while(true) {
            System.out.println("Enter password: ");
            key = new Scanner(System.in);
            entry = key.nextLine();
            if(entry.compareTo(password) == 0){
                count++;
                System.out.println("You're one step closer to a free coffe! You have so far bought " 
                        + count + " coffe(s)");
                f.saveToFile(count);
            }
            if(count == 10  && count != 0){
                System.out.println("YOU'VE GOT A FREE COFFE!");
                count = 0;
            }
            if(entry.compareTo(password) != 0){
                System.out.println("Wrong password! Try again.\n");
            }
        }



    }

    public void saveToFile(int count)
    {
        BufferedWriter bw = null;
        try
        {
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("C:\\Temp\\countStorage.txt"))));
            bw.write(Integer.toString(count));
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if(bw != null)
            {
                try
                {
                    bw.close();
                }
                catch(IOException e) {}
            }
        }
    }

    public int readFromFile()
    {
        BufferedReader br = null;
        try
        {
            br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("C:\\Temp\\countStorage.txt"))));
            String line = br.readLine();
            int count = Integer.parseInt(line);
            return count;
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if(br != null)
            {
                try
                {
                    br.close();
                }
                catch(IOException e) {}
            }
        }
        return 0;
    }


}

2 个答案:

答案 0 :(得分:1)

您当前正在将count变量设置为0.您应该将其设置为文件中的值。在while循环之前执行此操作:

count = f.readFromFile();
while(true) {

您还应该实现一种优雅地退出while循环的方法。例如,如果用户输入" q",您可以执行break;语句以退出while循环。在while循环后,请调用key.close();以关闭扫描程序对象。

答案 1 :(得分:0)

count变量的范围在两个实例中都是本地的

public static void main(String [] args) {
    Scanner key;
    String entry;
    int count = 0;
    String password = "knusan01";


   System.out.println(f.readFromFile());

public int readFromFile()
{
    BufferedReader br = null;
    try
    {
        br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("C:\\Temp\\countStorage.txt"))));
        String line = br.readLine();
        int count = Integer.parseInt(line);
        return count;

在readFromFile函数中,你从文件中读取它,返回它,但是不要在变量中跟踪它,为什么不在你的main中替换println:

count=f.readFromFile