Файл становится пустым после его перезаписи - PullRequest
0 голосов
/ 13 июня 2019

поэтому я написал код в своем проекте, где я сохранил несколько голосов в строках в отдельном файле. Затем я читаю этот файл и извлекаю голоса в строках в одномерный массив, затем мне нужно увеличивать их, как если бы пользователь вводил 1, 1 голос добавляется в первую строку, если пользователь вводит 2, один голос увеличивается до 2 ряда и тд. После этого мне нужно сохранить этот увеличенный массив с добавленными голосами в тот же файл (перезаписать), откуда они были изначально извлечены.

Я сталкиваюсь с двумя проблемами: во-первых, когда пользователь вводит 1, фактически выполняется 7 приращений, потому что цикл выполняется 7 раз, когда длина массива равна 7. Вторая проблема, после перезаписи файла, показывает результаты с увеличенными голосами в выходных данных, но файл становится пустым, и при повторном запуске он показывает 0,0,0,0 .... даже после использования output.close () в конце.

Пожалуйста, предложите, я должен представить проект завтра, и еще есть, что написать, если кто-то мог бы, пожалуйста, одолжить 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 голосов
/ 13 июня 2019

Ваша проблема заключается в этом цикле:

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

в предыдущем цикле rF.hasNext() уже false.

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

так что нечего было писать. вместо этого вы можете попробовать:

i=0;
while ( i<7) {
   wF.write(votesConverted[i]);
   i++;
}
0 голосов
/ 13 июня 2019

Перезапись, подобная этой, не работает - когда файл открывается для записи, он фактически очищается. Этого не происходит, когда файл открывается для добавления, но, похоже, вы этого не хотите. Вам нужно записать в другой файл, затем в конце удалить исходный файл и переместить новый файл в его местоположение.

...