代码之家  ›  专栏  ›  技术社区  ›  M.Barandov

如何查看格式化程序类创建的文件的输出

  •  0
  • M.Barandov  · 技术社区  · 6 年前

    我编写了下面的代码&它使文件和写得很完美,但是我想看到输出中文件的内容,但是我只得到了这个消息:“java. Io.BuffeDeReDebug @ 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 回复  |  直到 6 年前
        1
  •  1
  •   Kevin Anderson    6 年前

    使代码正常工作所需的最小更改是替换行

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

    具有

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

    毫无疑问你在期待 String.valueOf(file) 以某种方式让您访问 目录 文件的 D:\test.txt ,在某种程度上 Scanner 然后可以阅读这些内容。 Formatter 只有 数据 ;无法读取数据。为此,你需要一个 FileInputStream .

    所以,首先,通过关闭 格式化程序 :

    file.close();
    

    现在 D:\测试.txt 只是磁盘上的一个文件,现在可以用 文件输入流类 :

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

    如果你愿意,你可以用 扫描仪 :

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

    然后通过调用 扫描仪 方法。

    下面是对示例进行更彻底的修改的版本,它更清楚地强调了写操作和读操作之间的分离:

    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();
            }
        }
    }
    
        2
  •  0
  •   mentallurg    6 年前

    使用以下选项:

    sc = new Scanner(file);