用Java编写文件的替代方法

用Java编写文件的替代方法,java,file-io,Java,File Io,我有下一个函数: static void write() { try { File file = new File ("flip.out"); BufferedWriter out = new BufferedWriter(new FileWriter(file)); out.write(sMax); System.out.println(sMax);//This command it works

我有下一个函数:

static void write()
{
    try {
         File file = new File ("flip.out");
         BufferedWriter out = new BufferedWriter(new FileWriter(file));
         out.write(sMax);
         System.out.println(sMax);//This command it works
         out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

问题是我的程序没有在我的文件中写入任何内容。

在关闭之前,你能调用
out.flush()

这将确保缓冲区中的任何内容都会立即写入文件。

需要纠正的事情很少-

为什么要创建文件对象的两个不同实例

File file = new File ("flip.out");
BufferedWriter out = new BufferedWriter(new FileWriter("flip.out"));
你需要做的就是

File file = new File ("flip.out");
BufferedWriter out = new BufferedWriter(new FileWriterfile(file ) ));
下一步,在
finally语句中输入结束调用,而不是try block。为什么?由于IOException发生,资源将不会关闭,如果资源未关闭,您的更改可能不会反映在文件中

其次,不捕获运行时异常是一种很好的编程实践。因此,不要将
Exception
用作捕捉异常的多边形类型。在您的案例中使用像IOException一样抛出的任何内容

现在可能有各种各样的原因来解释为什么在文件中写入noting。由于没有得到异常,这可能是因为没有调用静态函数,或者字符串/object
sMax
(无论是什么)为空


此外,文件(如果尚未存在)将在当前目录中创建。因此,如果您的代码中有多个实例正在创建同名文件,那么请确保选中了正确的实例。

您必须刷新流,以便将内存中的内容写入驱动器。您写入BufferedWriter的内容位于一个字节数组中,等待它的其余部分被填满,然后再实际写入磁盘。这有助于提高性能,但意味着您必须刷新流,以防没有填满缓冲区。以下是如何做到这一点:

static void write() throws IOException {
    BufferedWriter out = new BufferedWriter(new FileWriter("flip.out"));
    try {
        out.write(sMax);
        out.flush();
    } catch (Exception e) {
        // probably could ditch this and 
        // just the exception bubble up and 
        // handle it higher up.
        e.printStackTrace(); 
    } finally {
        out.close();
    }
}

因此,如果它到达flush(),我们就知道我们已经将所有内容写入了我们想要的流。然而,如果我们遇到异常,我们会确保关闭流,不管成功与否。最后,我们的流在try语句之外,因为writer/OutputStreams在构造期间引发的唯一异常是FileNotFoundException,这意味着文件从未打开过,因此我们不必关闭它。

sMax来自何处?sMax是该类的成员。当我调用System.out.println(sMax)时,它显示在console@Kugathasan阿比马兰也不例外!