Как увидеть вывод файла, созданного с помощью Formatter Class - PullRequest
0 голосов
/ 02 июня 2018

Я пишу приведенный ниже код, и он создает файл и прекрасно пишет в него, но я хочу видеть содержимое файла в выводе, но я получаю только это сообщение: "java.io.BufferedWriter@140e19d".Я не понимаю этого!Может ли кто-нибудь объяснить мне, почему я получаю это сообщение?и что я должен сделать, чтобы увидеть содержимое файла?tnx.

Вот мой код:

package com.example.idea;

import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;

public class Main {

 public static void main(String[] args) {

    Formatter file = null;
    Scanner sc =null;
    try {
        file = new Formatter("D:\\test.txt");
        file.format("%s %s", "Hello", "World");
        sc = new Scanner(String.valueOf(file));
        while (sc.hasNext()){
            System.out.println(sc.next());
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }finally {
        if (file != null) {
            file.close();
        }
        if (sc != null) {
            sc.close();
        }
    }




    }

}

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Минимальное изменение, необходимое для работы вашего кода, - это заменить строку

sc = new Scanner(String.valueOf(file));    // WRONG!!!

на

file.close();
sc = new Scanner(new FileInputStream("D:\\test.txt"));

Без сомнения, вы ожидали, что String.valueOf(file) каким-то образом предоставит вам доступк содержимому файла D:\test.txt таким образом, чтобы Scanner мог затем прочитать это содержимое. A Formatter только записывает данные ;он не может прочитать данные обратно.Для этого вам понадобится FileInputStream.

Итак, сначала закончите запись в файл, закрыв Formatter:

file.close();

Теперь D:\test.txt - это просто файлна диске, как и любой другой, и теперь доступен для чтения с помощью FileInputStream:

new FileInputStream("D:\\test.txt")

Если хотите, вы можете обернуть этот поток в Scanner:

sc = new Scanner(new FileInputStream("D:\\test.txt"));

и затем обработка данных с помощью вызовов Scanner методов.

Вот более радикально переработанная версия вашего примера, которая более четко выделяет разделение между операциями записи и чтения:

public class Main
{
    private static void writeFile(String fileName) throws FileNotFoundException
    {
        Formatter file = null;
        try {
            file = new Formatter(fileName);
            file.format("%s %s", "Hello", "World");
        } finally {
            if (file != null) {
                file.close();
            }
        }
    }

    private static void readFile(String fileName) throws FileNotFoundException
    {
        Scanner sc = null;
        try {
            sc = new Scanner(new FileInputStream(fileName));
            while (sc.hasNext()) {
                System.out.println(sc.next());
            }
        } finally {
            if (sc != null) {
                sc.close();
            }
        }
    }

    public static void main(String[] args)
    {
        final String fileName = "test.txt";
        try {
            writeFile(fileName);
            readFile(fileName);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
0 голосов
/ 02 июня 2018

Используйте следующее:

sc = new Scanner(file);
...