为什么此输出会打印一个空白文件?

时间:2014-03-21 02:18:47

标签: java file-io

这个小代码片段应该输出一个包含文本的文件:

public static void main(String[] args) {
    try{
        Path gabblePath = Paths.get("C:/Users/AlterionX/Documents/"
                 + "NetBeansProjects/File Creator, Function Example/src/file/"
                 + "gabble.txt");
        Charset cs = Charset.defaultCharset();
        Scanner scanner = new Scanner(System.in);
        String total = scanner.nextLine();
        System.out.println(total);
        BufferedWriter writer = Files.newBufferedWriter(gabblePath, cs);
        writer.write(total);
        System.out.println("total printed");
    }catch(IOException ex){
        System.out.println("IO Exception");
    }
    System.exit(0);
}

相反,它会创建并返回一个空白文件。它运行成功,所有其他东西,它只是创建一个空白文件。

我应该关闭扫描仪还是其他东西?

EDIT 我取出扫描仪并将其更改为实际的字符串,仍然无法正常工作。

2 个答案:

答案 0 :(得分:0)

尝试使用FileWriter类。

FileWriter fw = new FileWriter(gabblePath);

fw.write(total);
fw.flush();
fw.close();

您只需要输出文件和内容的路径。

答案 1 :(得分:0)

关闭Writer并确保无条件地执行(即最终阻止)。

public static void main(String[] args) {
    BufferedWriter writer = null;
    try{
        Path gabblePath = Paths.get("C:/Users/AlterionX/Documents/"
                 + "NetBeansProjects/File Creator, Function Example/src/file/"
                 + "gabble.txt");
        Charset cs = Charset.defaultCharset();
        Scanner scanner = new Scanner(System.in);
        String total = scanner.nextLine();
        System.out.println(total);
        writer = Files.newBufferedWriter(gabblePath, cs);
        writer.write(total);
        System.out.println("total printed");
    }catch(IOException ex){
        System.out.println("IO Exception");
    } finally {
        if (writer != null) {
            try {
                writer.close();
            }
            catch (IOException e) { /* ignore */ }
        }
    }
    System.exit(0);
}

我认为在Java 7或8中最终清理代码中有一种更简洁的方法来处理try / catch,但我还没有使用它,所以我不确定。