【问题标题】:Java: PrintWriter not writing in fileJava:PrintWriter 未写入文件
【发布时间】:2018-11-29 23:14:46
【问题描述】:

我遇到了PrintWriter 的一些问题。我写了一些代码,只是从一个文件中获取一些输入并将其输出到另一个文件。

虽然创建了一个文件,但该文件仍然是空的。想要的输入可以很容易地在控制台中打印出来,这意味着 FileInputStream 工作正常。

为什么 PrintWriter 不打印任何东西?

public static void writeInFile(File in, File out) throws FileNotFoundException {
    PrintWriter outputStream = null
    Scanner scanner = new Scanner(new FileInputStream(in));
    outputStream = new PrintWriter(new FileOutputStream(out));
    outputStream.print("test");
    while(scanner.hasNext()) {
    outputStream.print(scanner.nextLine() + "\n");
    }
    scanner.close();
}

【问题讨论】:

  • 看起来你从来没有在第二种方法中关闭 outputStream。
  • 您可能想在 writeIntFile 中检查 scanner.hasNextLine() 而不是 scanner.hasNext(),因为您正在逐行抓取 scanner.nextLine()

标签: java outputstream fileoutputstream printwriter


【解决方案1】:

确保您始终关闭您的OutputStreams

        while(scanner.hasNext()) {
            String s = scanner.nextLine();
            outputStream.print(s+"\n");
            System.out.println("Test "+s); //d.h. das Problem liegt am outputstream
        }
        outputStream.close();
        scanner.close();

编辑:当您close outputStream 时,它会自动调用flush,它将缓冲区写入文件。如果不关闭它,缓冲区可能永远不会被清空/写入文件,就像这里的情况一样。

另见this answer

【讨论】:

    【解决方案2】:

    在处理需要清理的 IO 时,我更喜欢使用自动资源清理。这就是您最基本的需要:

    public static void writeInToOut(InputStream in, OutputStream out) {
        try(PrintWriter outputStream = new PrintWriter(out);
            Scanner scanner = new Scanner(in)) {
            while(scanner.hasNext()) {
                outputStream.print(scanner.nextLine()+"\n");
            }
        }
    }
    

    您现在可以通过多种方式重载此函数:

    public static void writeInToOut(File file, OutputStream out) {
        try (InputStream in = new FileInputStream(file)) {
            writeInToOut(in, out);
        } catch (IOException e) {
            Logger.getAnonymousLogger().log(Level.WARNING, "IOError", e);
        }
    }
    
    public static void writeInToOut(File inFile, File outFile) {
        try (InputStream in = new FileInputStream(inFile);
             OutputStream out = new FileOutputStream(outFile)) {
            writeInToOut(in, out);
        } catch (IOException e) {
            Logger.getAnonymousLogger().log(Level.WARNING, "IOError", e);
        }
    }
    
    public static void writeStdInToFile(File file) {
        try (OutputStream out = new FileOutputStream(file)) {
            writeInToOut(System.in, out);
        } catch (IOException e) {
            Logger.getAnonymousLogger().log(Level.WARNING, "IOError", e);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2015-07-21
      • 2015-09-16
      • 2012-06-26
      相关资源
      最近更新 更多