Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:PrintWriter未在文件中写入_Java_Outputstream_Fileoutputstream_Printwriter - Fatal编程技术网

Java:PrintWriter未在文件中写入

Java:PrintWriter未在文件中写入,java,outputstream,fileoutputstream,printwriter,Java,Outputstream,Fileoutputstream,Printwriter,我遇到了一些关于PrintWriter的问题。我编写了一些代码,只需从一个文件中获取一些输入并将其输出到另一个文件 虽然创建了一个文件,但该文件仍然为空。所需的输入可以在控制台中轻松打印出来,这意味着FileInputStream工作正常 为什么PrintWriter不打印任何东西 public static void writeInFile(File in, File out) throws FileNotFoundException { PrintWriter outputStrea

我遇到了一些关于
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();
}

确保始终关闭
输出流

        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();
编辑:当您
关闭它自动调用的输出流
flush
时,它会将缓冲区写入文件。如果不关闭它,缓冲区可能永远不会被清空/写入文件,就像这里的情况一样


另请参见。

在处理需要清理的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);
    }
}

看起来您从未在第二种方法中关闭输出流。您可能希望在WriteInFile中检查
scanner.hasNextLine()
,而不是
scanner.hasNext()
,因为您正在使用
scanner.nextLine()