文件覆盖后变为空

时间:2019-06-13 07:57:52

标签: java arrays file-handling

因此,我在项目中编写了代码,在其中将一些投票存储在单独文件中。然后,我读取该文件,并将行中的票数提取到一维数组中,然后像用户输入1一样将其递增,如果第一行中添加了1票,如果用户输入2,则将一票递增了。 2排,依此类推。之后,我必须将添加了票数的递增数组存储到最初提取它们的同一文件中(覆盖)。

我面临两个问题,首先,当用户输入1时,实际上完成了7个增量,因为当数组长度为7时,循环运行了7次。第二个问题是,文件被覆盖后,它显示结果将在输出中增加投票数,但是文件变为空,并且再次运行该文件时,即使最后使用了output.close(),它也会显示0,0,0,0...。

请建议,我明天必须提交项目,还有很多东西要写,如果有人可以借出2,3个小时来提供帮助,那将是很好的。

public static int[] voteCasting(String resultFile) {

     String[] votesArray = new String[7];
     int[] votesConverted = new int[votesArray.length];

     try {
         String partyVotes = "";
         int castedVotes;

         int i = 0;

         Scanner uI = new Scanner(System.in);
         Scanner rF = new Scanner (new File(resultFile));


         int userInput = uI.nextInt();

         while (rF.hasNext()) {
             partyVotes = rF.next();
             votesArray[i]= partyVotes;
             votesConverted[i] = Integer.parseInt(votesArray[i]);
             i++;
             if (userInput == 1) {
                 votesConverted[0] = ++votesConverted[0];

             }
             else if (userInput == 2) {
                 votesConverted[1] = votesConverted[1]++;
             }
             else if (userInput == 3) {
                 votesConverted[2] = votesConverted[2]++;
             }
             else if (userInput == 4) {
                 votesConverted[3] = votesConverted[3]++;
             }
             else if (userInput == 5) {
                 votesConverted[4] = votesConverted[5]++;
             }
             else if (userInput == 6) {
                 votesConverted[6] = votesConverted[6]++;
             }
             else if (userInput == 7) {
                 votesConverted[7] = votesConverted[7]++;
             }

         }

         PrintWriter wF = new PrintWriter(resultFile);

         while ( rF.hasNext()) {
             wF.write(votesConverted[i]);
             i++;
         }
         wF.flush();
         wF.close();


     } catch (IOException ex) {
          Logger.getLogger(ProjectTesting.class.getName()).log(Level.SEVERE, null, ex);
     }
     return votesConverted;
 }

2 个答案:

答案 0 :(得分:0)

这样的覆盖不起作用-打开文件进行写入时,实际上将其清空。打开文件进行追加时不会发生这种情况,但这似乎并不是您想要的。您需要写入另一个文件,然后最后删除原始文件,然后将新文件移到其位置。

答案 1 :(得分:0)

您的问题在于此循环:

while ( rF.hasNext()) {
   wF.write(votesConverted[i]);
   i++;
 }

上一个循环rF.hasNext()中的虚假消息。

...
while (rF.hasNext()) {
   partyVotes = rF.next();
   votesArray[i]= partyVotes;
....

所以没有什么可写的。相反,您可以尝试:

i=0;
while ( i<7) {
   wF.write(votesConverted[i]);
   i++;
}