Java (чтение и запись в файл)

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class backup {

    public static void main(String[] args) {
        System.out.println("\nThe names in the file are:\n");
        readFromFile();
    }

    public static void readFromFile() {
        try {
            Scanner file = new Scanner(new File("Names.txt"));
            PrintWriter pass = new PrintWriter("pass.txt");
            PrintWriter fail = new PrintWriter("fail.txt");

            Scanner input = new Scanner(System.in);
            while (file.hasNext()) {
                String name = file.nextLine();
                System.out.printf("Please enter " + name + "'s mark:");
                int mark = input.nextInt();
                Scanner kybd = new Scanner(System.in);
                {
                    if (mark >= 40) {
                        // System.out.println(name + " has passed");
                        pass.println(name);
                    } else {
                        // System.out.println(name + " has failed");
                        fail.println(name);
                    }
                }
            } // end while
        } // end try
        catch (IOException ioe) {
            System.out.println("Error handling file");
        } // end catch
    }// readFromFile
}

Невозможно записать в файл прохода и сбой. Файл имен представляет собой просто список имен, если пользователь набирает более 40 баллов, они входят в проход, однако я не могу получить файл txt для заполнения вывода.

Когда я вставляю свой печатный компьютер в while, это только последняя запись, которая добавляется в текстовый файл с проверкой или отказом.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
347
4

Ответы 4

Вы должны вызвать функцию close в вашем файле, чтобы он был записан на диск.

В противном случае ваши модификации остаются только в памяти

Что-то вроде: file.close()

PrintWriter действительно пишет, только когда они закрыты (close) или сброшены (flush или, может быть, когда думает, что пора ;-)).

По возможности старайтесь использовать попробовать с ресурсами, чтобы не думать о закрытии / очистке потока или записи. try-with-resources заботится о том, чтобы реализации AutoClosable автоматически закрывались в конце блока try.

Ваш образец переписан с помощью try-with-resources (показывает только начальную часть):

try(
  Scanner file = new Scanner(new File("Names.txt"));
  PrintWriter pass = new PrintWriter("pass.txt");
  PrintWriter fail = new PrintWriter("fail.txt")
) {

Остальное можно оставить как есть ... или, если хотите: вы также можете найти Файлы-API. Может быть, использование Files.lines - это что-то для вас?

Если вы используете PrintWriter, вам нужно записать close в конце потока. В противном случае это будет только в памяти. Попробуй это:

    try {
        Scanner file = new Scanner(new File("Names.txt"));
        PrintWriter pass = new PrintWriter("pass.txt");
        PrintWriter fail = new PrintWriter("fail.txt");

        Scanner input = new Scanner(System.in);
        while (file.hasNext()) {
            String name = file.nextLine();
            System.out.printf("Please enter " + name + "'s mark:");
            int mark = input.nextInt();
            //Scanner kybd = new Scanner(System.in);
            //{
                if (mark >= 40) {
                    // System.out.println(name + " has passed");
                    pass.println(name);
                } else {
                    // System.out.println(name + " has failed");
                    fail.println(name);
                }
            //}
        } // end while
        pass.close();
        fail.close();
    } // end try
    catch (IOException ioe) {
        System.out.println("Error handling file");
    }

Вам нужно убедиться, что вы добавили блок finally в конце и вызывали метод close для всего, что закрывается, в данном случае - на печатной машине. В таком случае pass.close () и fail.close ().

Другие вопросы по теме