【问题标题】:Can't read file correctly?无法正确读取文件?
【发布时间】:2014-05-19 22:48:02
【问题描述】:

我正在制作一个游戏,我有一个角色选择屏幕,您可以在该屏幕上添加/删除角色。添加字符效果很好,但我认为删除部分很奇怪。

代码已删除 Delbutton 的 ActionListener

这会导致这里程序的 delChar 方法。

public static void delChar(int charNum)
    {
        String input;
        try {
            ArrayList<String> oldFile = new ArrayList<String>();
            br = new BufferedReader(new FileReader(file));
            while ((input = br.readLine()) != null)
            {
                if (!input.startsWith(charNum + "*"))
                {
                    oldFile.add(input);
                }
            }
            br.close();
            FileWriter write = new FileWriter(file,false);
            PrintWriter print = new PrintWriter(write); 
            for (int i =0;i<oldFile.size();i++)
            {
                print.printf("%s" + "%n", oldFile.get(i));
            }
            write.close();

            print.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

然后在这里进入charSelect方法。

    public static void charSelect(){
        String[] stat = StatReader.getCharStats(charNum);
        if (StatWriter.getCharCount() <1)
        {
            name.setText("No Characters Created");
            classs.setText("");
            lv.setText("");
            ad.setText("");
            md.setText("");
            as.setText("");
            armor.setText("");
            mr.setText("");
            health.setText("");
            mana.setText("");
            energy.setText("");
            mReg.setText("");
            eReg.setText("");
            hReg.setText("");
        }
        try
        {
        name.setText(stat[0]);
        classs.setText(stat[1]);
        lv.setText(stat[2]);
        ad.setText(stat[3]);
        md.setText(stat[4]);
        as.setText(stat[5]);
        armor.setText(stat[6]);
        mr.setText(stat[7]);
        health.setText(stat[8]);
        mana.setText(stat[9]);
        energy.setText(stat[10]);
        mReg.setText(stat[11]);
        eReg.setText(stat[12]);
        hReg.setText(stat[13]);

//      System.out.println(charNum);
//      System.out.println(Arrays.toString(stat));
        }
        catch(NullPointerException e)
        {

        }
        MainMenu.MMframe.repaint();
        MainMenu.MMframe.setVisible(true);
    }

然后我希望屏幕会显示“无字符”,但事实并非如此。我发现的另一件事是,当我从文件中删除字符时,它确实删除了它,但程序仍然认为它在那里?

这是涉及读取文件的代码。

public static String[] getCharStats(int CharNum)
    {
    try {
//      System.out.println(CharNum);
        try {
            br = new BufferedReader(new FileReader(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
            while ((input = br.readLine()) != null)
            {
//              System.out.println(input);

                if (input.length() !=0)
                {
                    if (input.startsWith(CharNum + "*"))
                    {

                         getMultiStatLine(14);
                    }
                }
            }

            br.close();

//          JOptionPane.showMessageDialog(null, "<html>Name:" + output[0]
//                  +"<br>Class:" + output[1]
//                  +"<br>Level:" + output[2]
//                  +"<br>Attack:" + output[3]
//                  +"<br>Magic:" + output[4]
//                  +"<br>Attack Speed:" + output[5]
//                  +"<br>Armor:" + output[6]       
//                  +"<br>Magic Resist:" + output[7]
//                  +"<br>Health:" + output[8]
//                  +"<br>Mana:" + output[9]
//                  +"<br>Energy:" + output[10]
//                  +"<br>Mana Regen:" + output[11]
//                  +"<br>Energy Regen:" + output[12]
//                  +"<br>Health Regen:" + output[13]);
        } 
        catch (IOException e) {e.printStackTrace();}
    return output;
    }
    public static String[] getMultiStatLine(int Places)
    {
        output = new String[Places];
        int[] bsSlots = new int[Places - 1];
        int bsPoints = 0;
                for (int i = 3; i < input.length();i++)
                {

                    if (input.charAt(i) == '/')
                    {
//                      System.out.println("found /");
                        bsPoints++;
                        bsSlots[bsPoints-1] = i;
//                      System.out.println(bsPoints);
//                      System.out.println(Arrays.toString(bsSlots));
                    }
                    else if (bsPoints +1 == Places)
                    {
                        for (int c =0; c < Places; c++)
                        {
                            if (c == 0)
                            {
                                output[c] = input.substring(2,bsSlots[c]);
                            }
                            else if (c +1 == Places)
                            {
                                output[c] = input.substring(bsSlots[bsSlots.length - 1] + 1);
//                              System.out.println("c == " + Places);
                            }
                            else if (c > 0)
                            {
                                output[c] = input.substring(bsSlots[c-1] + 1,bsSlots[c]);
//                              System.out.println("c > 0");
                            }


//                          output[c] = input.substring();
                        }
                        i = input.length();
                        //md = input.substring(i + 1, input.length());
                        //ad = input.substring(2,i);

                    }

                }



        return output;

    }

任何帮助将不胜感激。

【问题讨论】:

  • 你能把它提炼成更简洁的东西吗?这需要大量代码。谢谢
  • 我觉得 actionlistener 是我唯一可以真正删除的代码,对于程序来说,了解所有内容都是非常必要的

标签: java jframe jpanel filereader filewriter


【解决方案1】:

我可以看到您正在删除文件中的字符,但您并没有告诉程序忘记该字符,您是否尝试在删除后更新?

【讨论】:

  • 如何让程序忘记角色?
  • 是的,如果您可以更具体一点,即使用代码片段。
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 2019-03-30
  • 2018-07-24
  • 2020-03-11
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多